2012-10-04 2 views
2

이 간단한 목록javascript와 Jquery를 사용하여 url 변수를 검색하는 기능? 내 스크립트에

<ul> 
<li><a href="edit.php?id=5" class="edit">click here</a></li> 
<li><a href="edit.php?id=5" class="edit">click here</a></li> 
<li><a href="edit.php?id=5" class="edit">click here</a></li> 
<li><a href="edit.php?id=5" class="edit">click here</a></li> 
</ul> 

내가 변수 ID를 읽을 수있다 필요 그래서 난 아약스 호출을 통해 보낼 수 있습니다 편집 링크를 보여줍니다 나는이 기능을 시도

$(document).ready(function(){ 
    function getUrlVars() { 
     var vars = [], hash; 
     var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1) 
             .split('&'); 
     for(var i = 0; i < hashes.length; i++) 
     { 
      hash = hashes[i].split('='); 
      vars.push(hash[0]); 
      vars[hash[0]] = hash[1]; 
     } 
     return vars; 
    } 
    $('.edit').click(function(){ 
     var test = getUrlVars()["id"]; 
     alert(test); 
    }); 
}); 

링크를 클릭하면 경고 메시지에 undefined이 표시됩니다.

나는 다른 함수 시도 :

$(document).ready(function(){ 
    var urlParams = {}; 
    (function() { 
     var match, 
       pl = /\+/g, // Regex for replacing addition symbol with a space 
      search = /([^&=]+)=?([^&]*)/g, 
      decode = function(s) { 
       return decodeURIComponent(s.replace(pl, " ")); 
      }, 
      query = window.location.search.substring(1); 
      while (match = search.exec(query)) 
       urlParams[decode(match[1])] = decode(match[2]); 
    })(); 
    $('.edit').click(function(){ 
     var test = urlParams["id"]; 
     alert(test); 
    }); 
}); 

을 ...하지만 심지어이 또한 경고 메시지 undefined을 보여줍니다.

+1

'vars.push (hash [0]); vars [hash] [0] = hash [1]; - 무엇 때문에 왜 배열과 객체처럼 vars를 처리하려고합니까? – raina77ow

+0

정확하게 @ raina77ow - 방금이 함수를 사용하려고하는 코드를 검토 한 결과 똑같은 것으로 나타났습니다. 나쁜 코드는 내가 생각한 4 년 후에도 물지 않습니다.) – kamituel

답변

2

방법 당신의 인자로 URL을하지만, 현재의 URL을 구문 분석하지 않는 매개 변수 노력 (동생 내에서, 즉 URL). 그냥 작동하도록 다음과 같이 첫 번째 방법을 수정

$(function() { 
    function getUrlVars(url) { 
     var vars = [], hash; 
     var hashes = url.slice(url.indexOf('?') + 1).split('&'); 
     for(var i = 0; i < hashes.length; i++) { 
      hash = hashes[i].split('='); 
      vars.push(hash[0]); 
      vars[hash[0]] = hash[1]; 
     } 
     return vars; 
    } 
    $('.edit').click(function() { 
     var href = $(this).attr("href"); 
     var test = getUrlVars(href)["id"]; 
     alert(test); 
    }); 
}); 

사이드 참고 : 또한 두 번째를 수정할 수, 둘 다 같은 일을하고 있어요.

+0

이 한 명의 작업 감사관 –

0

는 시도이 하나

function getParameterByName(name) 
{ 
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); 
    var regexS = "[\\?&]"+name+"=([^&#]*)"; 
    var regex = new RegExp(regexS); 
    var results = regex.exec(window.location.href); 
    if(results == null) 
    return ""; 
    else 
    return decodeURIComponent(results[1].replace(/\+/g, " ")); 
} 
1

문제의 대안으로 hrefid 부분을 data 매개 변수에 넣고 읽어 보시기 바랍니다. URL을 분석하지 않아도됩니다. 이 시도 :

<ul> 
    <li><a href="edit.php?id=5" data-id="5" class="edit">click here</a></li> 
    <li><a href="edit.php?id=6" data-id="6" class="edit">click here</a></li> 
    <li><a href="edit.php?id=7" data-id="7" class="edit">click here</a></li> 
    <li><a href="edit.php?id=8" data-id="8" class="edit">click here</a></li> 
</ul> 
$('.edit').click(function(){ 
    var id = $(this).data("id"); 
    alert(id); 
}); 
+0

에 감사드립니다. http://jsfiddle.net/에서 테스트했는데 잘 작동하지만 스크립트에서 작동하지 않습니다. 왜 그런지 알아? –

+0

@ Dr.Neo는 HTML5 Doctype을 사용하고 있습니까? 콘솔에 오류가 있습니까? –

+0

아니요 doctype을 사용하지 않습니다. 그냥 데이터 테이블 플러그인 –

0

변경이 아니라 개체 배열을 사용합니다.

function getUrlVars() { 
    var vars = {}, //<--object 
    hash; 
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1) 
            .split('&'); 
    for(var i = 0; i < hashes.length; i++) 
    { 
     hash = hashes[i].split('='); 
     vars[hash[0]] = hash[1]; //<--add to the object 
    } 
    return vars; //<--return the object 
} 

또한 당신은 그래서 당신은 초기 슬라이스 것을 할 필요가 없습니다 window.location.search를 사용할 수 있습니다.

관련 문제