문제

URL 매개변수를 가져오고 JavaScript 오류를 출력하지 않고 이 검색 문자열을 지원할 수 있는 jQuery 플러그인을 찾고 있습니다."잘못된 URI 시퀀스".이를 지원하는 jQuery 플러그인이 없다면 이를 지원하도록 수정하는 방법을 알아야 합니다.

?search=%E6%F8%E5

디코딩 시 URL 매개변수의 값은 다음과 같아야 합니다.

æøå

(캐릭터는 노르웨이 사람입니다).

서버에 액세스할 수 없으므로 서버의 어떤 것도 수정할 수 없습니다.

도움이 되었습니까?

해결책 10

이와 같은 것을 위해 jQuery를 사용해서는 안됩니다!
현대적인 방법은 Bower와 같은 패키지 관리자를 통해 작은 재사용 가능한 모듈을 사용하는 것입니다.

나는 작은 것을 만들었습니다 기준 치수 쿼리 문자열을 객체에 구문 분석 할 수 있습니다. 다음과 같이 사용하십시오.

// parse the query string into an object and get the property
queryString.parse(unescape(location.search)).search;
//=> æøå

다른 팁

function getURLParameter(name) {
    return decodeURI(
        (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
    );
}

아래는 언급되지 않은 버그를 고치는 것 (예 : 실제로 'null이 아닌 Null을 반환하는 것과 같은)을 고치는 것뿐만 아니라 여기에 의견에서 만든 것입니다.

function getURLParameter(name) {
    return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}

당신이 정말로 원하는 것은 jQuery URL Parser 플러그인. 이 플러그인을 사용하면 특정 URL 매개 변수 (현재 URL의 경우)의 값을 얻는 것이 다음과 같습니다.

$.url().param('foo');

매개 변수 이름이 키로 키와 매개 변수 값을 값으로 원하는 객체를 원한다면 param() 다음과 같은 논쟁없이 :

$.url().param();

이 라이브러리는 현재 URL뿐만 아니라 다른 URL과도 작동합니다.

$.url('http://allmarkedup.com?sky=blue&grass=green').param();
$('#myElement').url().param(); // works with elements that have 'src', 'href' or 'action' attributes

이것은 전체 URL 구문 분석 라이브러리이므로 지정된 포트 또는 경로, 프로토콜 등과 같은 URL에서 다른 정보를 얻을 수도 있습니다.

var url = $.url('http://allmarkedup.com/folder/dir/index.html?item=value');
url.attr('protocol'); // returns 'http'
url.attr('path'); // returns '/folder/dir/index.html'

다른 기능도 있습니다. 홈페이지 더 많은 문서 및 예제.

이 특정 목적을 위해 자신의 Uri Parser를 쓰는 대신 작동합니다 대부분 사례, 실제 URI 파서를 사용하십시오. 답변에 따라 다른 답변의 코드는 반환 할 수 있습니다. 'null' 대신에 null, 빈 매개 변수와 함께 작동하지 않습니다 (?foo=&bar=x), 모든 매개 변수를 한 번에 구문 분석하고 반환 할 수없고, 매개 변수의 URL을 반복적으로 쿼리하면 작업을 반복합니다.

실제 URI 파서를 사용하고 직접 발명하지 마십시오.

jQuery를 혐오하는 사람들에게는 있습니다 순수한 JS 인 플러그인의 버전.

URL 매개 변수가 무엇인지 모르고 매개 변수에있는 키와 값이있는 객체를 얻으려면 다음을 사용할 수 있습니다.

function getParameters() {
  var searchString = window.location.search.substring(1),
      params = searchString.split("&"),
      hash = {};

  if (searchString == "") return {};
  for (var i = 0; i < params.length; i++) {
    var val = params[i].split("=");
    hash[unescape(val[0])] = unescape(val[1]);
  }
  return hash;
}

URL과 같은 getParameters () 호출 /posts?date=9/10/11&author=nilbus 돌아올 것입니다 :

{
  date:   '9/10/11',
  author: 'nilbus'
}

질문에서 더 멀리 떨어져 있으므로 코드를 여기에 포함시키지 않지만 Weareon.net은 URL의 매개 변수를 조작 할 수있는 라이브러리를 게시했습니다.

브라우저 네이티브를 사용할 수 있습니다 위치. 검색 재산:

function getParameter(paramName) {
  var searchString = window.location.search.substring(1),
      i, val, params = searchString.split("&");

  for (i=0;i<params.length;i++) {
    val = params[i].split("=");
    if (val[0] == paramName) {
      return unescape(val[1]);
    }
  }
  return null;
}

그러나 도움을 줄 수있는 jQuery 플러그인이 있습니다.

를 기반으로 999의 대답:

function getURLParameter(name) {
    return decodeURIComponent(
        (location.search.match(RegExp("[?|&]"+name+'=(.+?)(&|$)'))||[,null])[1]
    );  
}

변경 :

  • decodeURI() 대체됩니다 decodeURIComponent()
  • [?|&] Regexp의 시작 부분에 추가됩니다

케이스를 둔감하게 만들려면 i 매개 변수를 추가해야합니다.

  function getURLParameter(name) {
    return decodeURIComponent(
      (RegExp(name + '=' + '(.+?)(&|$)', 'i').exec(location.search) || [, ""])[1]
    );
  }
$.urlParam = function(name){
  var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(top.window.location.href); 
  return (results !== null) ? results[1] : 0;
}

$.urlParam("key");

예를 들어 매개변수 변수의 값을 반환하는 함수입니다.

function GetURLParameter(sParam)
{
    var sPageURL = window.location.search.substring(1);
    var sURLVariables = sPageURL.split('&');
    for (var i = 0; i < sURLVariables.length; i++)
    {
        var sParameterName = sURLVariables[i].split('=');
        if (sParameterName[0] == sParam)
        {
            return sParameterName[1];
        }
    }
}​

그리고 이것은 URL이 다음과 같다고 가정하고 이 함수를 사용할 수 있는 방법입니다.

"http://example.com/?technology=jquery&blog=jquerybyexample".

var tech = GetURLParameter('technology');
var blog = GetURLParameter('blog');

따라서 위 코드에서 "tech" 변수는 값으로 "jQuery"를 가지며 "blog" 변수는 "jquerybyexample"이 됩니다.

모든 답을 읽은 후에는 매개 변수를 플래그로 사용하는 두 번째 함수 로이 버전으로 끝났습니다.

function getURLParameter(name) {
    return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)','i').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}

function isSetURLParameter(name) {
    return (new RegExp('[?|&]' + name + '(?:[=|&|#|;|]|$)','i').exec(location.search) !== null)
}

여기에는 버기 코드가 많이 있으며 Regex 솔루션은 매우 느립니다. Regex 대응 물보다 최대 20 배 빠르게 작동하는 솔루션을 찾았으며 우아하게 간단합니다.

    /*
    *   @param      string      parameter to return the value of.
    *   @return     string      value of chosen parameter, if found.
    */
    function get_param(return_this)
    {
        return_this = return_this.replace(/\?/ig, "").replace(/=/ig, ""); // Globally replace illegal chars.

        var url = window.location.href;                                   // Get the URL.
        var parameters = url.substring(url.indexOf("?") + 1).split("&");  // Split by "param=value".
        var params = [];                                                  // Array to store individual values.

        for(var i = 0; i < parameters.length; i++)
            if(parameters[i].search(return_this + "=") != -1)
                return parameters[i].substring(parameters[i].indexOf("=") + 1).split("+");

        return "Parameter not found";
    }

console.log(get_param("parameterName"));

REGEX는 전부 및 최종 솔루션이 아닙니다. 이러한 유형의 문제 간단한 문자열 조작은 엄청난 양을보다 효율적으로 작동시킬 수 있습니다. 코드 소스.

<script type="text/javascript">
function getURLParameter(name) {
        return decodeURIComponent(
            (location.search.toLowerCase().match(RegExp("[?|&]" + name + '=(.+?)(&|$)')) || [, null])[1]
        );
    }

</script>

getURLParameter(id) 또는 getURLParameter(Id) 동일하게 작동합니다 :)

jQuery 코드 스 니펫은 URL에 저장된 동적 변수를 매개 변수로 가져 와서 스크립트와 함께 사용할 준비가 된 JavaScript 변수로 저장합니다.

$.urlParam = function(name){
    var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
    if (results==null){
       return null;
    }
    else{
       return results[1] || 0;
    }
}

example.com?param1=name&param2=&id=6

$.urlParam('param1'); // name
$.urlParam('id');        // 6
$.urlParam('param2');   // null

//example params with spaces
http://www.jquery4u.com?city=Gold Coast
console.log($.urlParam('city'));  
//output: Gold%20Coast

console.log(decodeURIComponent($.urlParam('city'))); 
//output: Gold Coast
function getURLParameters(paramName) 
{
        var sURL = window.document.URL.toString();  
    if (sURL.indexOf("?") > 0)
    {
       var arrParams = sURL.split("?");         
       var arrURLParams = arrParams[1].split("&");      
       var arrParamNames = new Array(arrURLParams.length);
       var arrParamValues = new Array(arrURLParams.length);     
       var i = 0;
       for (i=0;i<arrURLParams.length;i++)
       {
        var sParam =  arrURLParams[i].split("=");
        arrParamNames[i] = sParam[0];
        if (sParam[1] != "")
            arrParamValues[i] = unescape(sParam[1]);
        else
            arrParamValues[i] = "No Value";
       }

       for (i=0;i<arrURLParams.length;i++)
       {
                if(arrParamNames[i] == paramName){
            //alert("Param:"+arrParamValues[i]);
                return arrParamValues[i];
             }
       }
       return "No Parameters Found";
    }

}

다음과 같은 URL에서 javaScript에서 URL 매개 변수를 가져 오는 간단한 기능을 만들었습니다.

.....58e/web/viewer.html?page=*17*&getinfo=33


function buildLinkb(param) {
    var val = document.URL;
    var url = val.substr(val.indexOf(param))  
    var n=parseInt(url.replace(param+"=",""));
    alert(n+1); 
}
buildLinkb("page");

산출: 18

당신이 localhost/index.xsp와 같은 URL을 가지고있는 경우를 대비하여?

var vars = [], hash, anchor;
var q = document.URL.split('?')[1];
if(q != undefined){
    q = q.split('&');
    for(var i = 0; i < q.length; i++){
        hash = q[i].split('=');
        anchor = hash[1].split('#');
        vars.push(anchor[0]);
        vars[hash[0]] = anchor[0];
    }
}

@pauloppenheim의 답을 약간 수정하면 다른 매개 변수 이름의 일부가 될 수있는 매개 변수 이름을 올바르게 처리하지 않으므로.

예 : "Appenv"및 "Env"매개 변수가있는 경우 "Env"의 값을 픽업 할 수 있습니다.

고치다:

var urlParamVal = function (name) {
    var result = RegExp("(&|\\?)" + name + "=(.+?)(&|$)").exec(location.search);
    return result ? decodeURIComponent(result[2]) : "";
};

이것은 도움이 될 수 있습니다.

<script type="text/javascript">
    $(document).ready(function(){
        alert(getParameterByName("third"));
    });
    function getParameterByName(name){
        var url     = document.URL,
            count   = url.indexOf(name);
            sub     = url.substring(count);
            amper   = sub.indexOf("&"); 

        if(amper == "-1"){
            var param = sub.split("=");
            return param[1];
        }else{
            var param = sub.substr(0,amper).split("=");
            return param[1];
        }

    }
</script>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top