jQuery 또는 일반 JavaScript를 사용하여 URL 매개 변수를 얻는 방법은 무엇입니까?


619

매개 변수 크기와 이름을 알 수없는 많은 jQuery 예제를 보았습니다.

내 URL에는 문자열이 하나만 있습니다.

http://example.com?sent=yes

나는 단지 탐지하고 싶다 :

  1. 않는 sent존재 하는가?
  2. "예"와 같습니까?




내가 본 최고의 솔루션 [여기] [1] [1] : stackoverflow.com/a/901144/3106590
hmfarimani

1
URI.js라는 플러그인 / 라이브러리가 있습니다 : github.com/medialize/URI.js
alexw

답변:


1211

여기에 최고의 솔루션 입니다.

var getUrlParameter = function getUrlParameter(sParam) {
    var sPageURL = window.location.search.substring(1),
        sURLVariables = sPageURL.split('&'),
        sParameterName,
        i;

    for (i = 0; i < sURLVariables.length; i++) {
        sParameterName = sURLVariables[i].split('=');

        if (sParameterName[0] === sParam) {
            return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
        }
    }
};

그리고 이것이 URL이이라고 가정 하고이 기능을 사용할 수있는 방법
http://dummy.com/?technology=jquery&blog=jquerybyexample입니다.

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

8
감사! 그러나 이것을 복사 할 때, 너비가 0 인 공백 (\ u200b)이 끝나는 것을 포함하여 엄청난 놀라움을 발견했습니다. 스크립트에 보이지 않는 구문 오류가 있습니다.
Christofer Ohlsson

11
반품 false또는 null빈 검색
스테파노 Caravana

4
이 솔루션은 저에게 아주 효과적입니다. 방금 사용한 var sPageURL = decodeURI (window.location.search.substring (1)); % 20 문자를 공백으로 변환하고 매개 변수가 일치하지 않으면 아무것도 아닌 빈 문자열을 반환합니다.
Christophe

18
이 주석 위의 모든 주석 코드 변경 사항을 포함하도록 답변을 업데이트했습니다.
Rob Evans

7
디코딩은 매개 변수 값에서 수행해야합니다 (Iouri가 제안한대로). 디코딩에서 URL에서 (답에서와 같이) 수행되면 인코딩 &되거나 =매개 변수 값 이 있으면 올바르게 작동하지 않습니다 .
zakinster

287

2020 년 솔루션

우리는 : http://example.com?sent=yes

let searchParams = new URLSearchParams(window.location.search)

합니까는 전송 존재를 ?

searchParams.has('sent') // true

그것이 동일 "예"에?

let param = searchParams.get('sent')

그런 다음 비교하십시오.


16
브라우저에서 이것이 지원되지 않는다고 생각하므로 왜 사용해야합니까? 참조 - developer.mozilla.org/en-US/docs/Web/API/URLSearchParams
p_champ

1
@p_champ 당신이 맞아요. 그러나 URLSearchParams에 폴리 필을
Optio

2
현재 IE / Edge에서 작동하지 않으므로 기능 감지도 수행 if ('URLSearchParams' in window) { // Browser supports URLSearchParams} 하십시오. 여기 참조
mfgmicha

4
나와 의도 한 청중에게 충분합니다. caniuse.com/#feat=urlsearchparams
jontsai

4
@p_champ Edge는 v17 (2018 년 4 월)에서 지원됩니다. IE를 죽게 내버려 두십시오.
Ryan DuVal

198

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

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

example.com?param1=name¶m2=&id=6

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

공백이있는 예제 매개 변수

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



console.log(decodeURIComponent($.urlParam('city'))); 
//output: Gold Coast

12
참고 : 특수 등 매개 변수 또는 Umlaute 같은 문자 그래서 대신에 거기 경우 디코딩 할 필요가 return results[1] || 0;그것을해야한다return decodeURI(results[1]) || 0;
카이 NOACK가

궁금한 점 || 0은 이미 결과를 확인했기 때문에 왜 부품 이 필요 합니까? 항상 일치 배열을 반환하지 않습니까?
AirWick219

@ AirWick219는 적절한 안전 장치입니다. 중복 적이지만 조심스럽게 다
치지

2
다음은 원래 소스입니다. sitepoint.com/url-parameters-jquery 그러나이 답변에는 새로운 아이디어가 추가되었습니다
bgmCoder

1
이것을 위해 jQuery를 사용할 가치가 있는지 확실하지 않습니다.
Quentin 2

88

나는 항상 이것을 한 줄로 붙입니다. 이제 params에는 변수가 있습니다.

params={};location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){params[k]=v})

여러 줄 :

var params={};
window.location.search
  .replace(/[?&]+([^=&]+)=([^&]*)/gi, function(str,key,value) {
    params[key] = value;
  }
);

기능으로서

function getSearchParams(k){
 var p={};
 location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){p[k]=v})
 return k?p[k]:p;
}

다음과 같이 사용할 수 있습니다.

getSearchParams()  //returns {key1:val1, key2:val2}

또는

getSearchParams("key1")  //returns val1

검색 문자열을 수정하는 추악한 해킹 ...하지만 외부 모듈이나 jquery가 필요하지 않습니다. 나는 그것을 좋아한다.
브라이스

4
@Bryce 실제로 검색 문자열을 수정하지 않습니다. .replace는 실제로 새 문자열을 반환하고 반환 된 문자열은 params 객체로 처리됩니다.
AwokeKnowing 2016 년

훌륭하고 짧으며 허용되는 솔루션과 달리 값이 필요할 때마다 URL을 재분석 할 필요가 없습니다. replace(/[?&;]+([^=]+)=([^&;]*)/gi";"을 재구성 하여 약간 개선 될 수 있습니다 . 구분 자로도 문자.
르 드로이드

명확하고 고통없는 한 줄짜리, 허용 된 답변보다 낫고 추가 라이브러리는 없습니다.
Sam

이것은 GET-query delimiter (물음표) 대신 해시를 사용하는 경우에 사용하는 것입니다. var params={};window.location.hash.replace(/[#&]+([^=&]+)=([^&]*)/gi,function(str,key,value){params[key] = value;}); 이것은 창에서 해시가 ajax 요청으로 업데이트되고 사용자가 URI로 이동하는 AJAX와 같은 경우에 유용합니다. 해시를 포함합니다.
Tommie

48

또 다른 대체 기능 ...

function param(name) {
    return (location.search.split(name + '=')[1] || '').split('&')[0];
}

이름은 문자열이어야합니다. 매력처럼 일했다 ~
mintedsky

2
이것은 내가 가장 좋아하는 것입니다. +1 주목할 점은 "종료"유형의 검색입니다. 예를 들어, 이름으로 "Phone"을 전달하고 "HomePhone"이라는 필드도있는 경우 URL에서 맨 앞에 오는 경우 잘못된 값을 반환 할 수 있습니다.
efreed

2
이것은 잘못이다! 예를 들어 param('t') == param('sent') == 'yes'OP 예에서. 다음은 수정 사항입니다. return (location.search.split(new RegExp('[?&]' + name + '='))[1] || '').split('&')[0]; 또한 누락 된 매개 변수에 대해 빈 문자열이 표시되므로 매개 변수가 존재하는지 알 수 없습니다.
oriadam

매우 간단하고 우아합니다. 꿈처럼 작동합니다. 감사합니다.
Anjana Silva

// (키의 마지막 부분 대신에 전체 키가 존재하도록하기 위해)return (location.search.split('?' + name + '=')[1] || location.search.split('&' + name + '=')[1] || '').split('&')[0];
Aaron

45

너무 늦을 수 있습니다. 그러나이 방법은 매우 쉽고 간단합니다.

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.url.js"></script>

<!-- URL:  www.example.com/correct/?message=done&year=1990 -->

<script type="text/javascript">
$(function(){
    $.url.attr('protocol')  // --> Protocol: "http"
    $.url.attr('path')      // --> host: "www.example.com"
    $.url.attr('query')         // --> path: "/correct/"
    $.url.attr('message')       // --> query: "done"
    $.url.attr('year')      // --> query: "1990"
});

업데이트
URL 플러그인이 필요합니다 : plugins.jquery.com/url
감사합니다-Ripounet


2
이것을 결정한 사람은 먼저 저장소를 확인해야합니다. 사용법이 변경되었습니다. $ .url.attr ( 'message')는 $ .url ( "query")가되고 전체 쿼리 만 제공합니다! 하나의 매개 변수 만 얻으려면 $ .url ( "query"). split ( "=") [1] url github 링크
pseudozach

34

또는 솔루션이 지나치게 복잡한 이유 때문에이 깔끔한 작은 기능을 사용할 수 있습니까?

function getQueryParam(param, defaultValue = undefined) {
    location.search.substr(1)
        .split("&")
        .some(function(item) { // returns first occurence and stops
            return item.split("=")[0] == param && (defaultValue = item.split("=")[1], true)
        })
    return defaultValue
}

단순화되고 한 줄로 표시되면 더 좋아 보입니다.

tl; dr 단선 솔루션

var queryDict = {};
location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]})
결과:
queryDict [ 'sent'] // 정의되지 않거나 'value'

그러나 인코딩 된 문자다중 값 키 를 가지고 있다면 어떨까요?

: 당신은 더 나은이 답변을보고 어떻게 자바 스크립트에서 쿼리 문자열 값을 얻을 수 있습니까?

맛보기

"?a=1&b=2&c=3&d&e&a=5&a=t%20e%20x%20t&e=http%3A%2F%2Fw3schools.com%2Fmy%20test.asp%3Fname%3Dståle%26car%3Dsaab"
> queryDict
a: ["1", "5", "t e x t"]
b: ["2"]
c: ["3"]
d: [undefined]
e: [undefined, "http://w3schools.com/my test.asp?name=ståle&car=saab"]

> queryDict["a"][1] // "5"
> queryDict.a[1] // "5"

3
문자열 분할은 정규식보다 빠를 가능성이 큽니다. 그것이 URL을 한 번만 구문 분석한다는 것을 고려한 요소는 아닙니다.
Patrick

이것은 브라우저에서 나를 위해 완벽하게 작동하는 솔루션 (첫 번째 솔루션)입니다-감사합니다!
NickyTheWrench

1
@NickyTheWrench 감사합니다! 어쨌든 이것은 매우 간단한 해결책이라는 점에 유의하십시오. 특수 문자가 포함 된 복잡한 URL 매개 변수가 있으면 제공된 링크를 확인하는 것이 좋습니다.
Qwerty 2016 년

@ Qwerty yup-내 유스 케이스는 매개 변수가 항상 같은 곳에서 매우 간단합니다 (기본적으로 OP가 요청한 내용). 다시 한번 감사드립니다!
NickyTheWrench

1
@BernardVanderBeken 흥미롭게도, 나는 그것을 고쳤습니다. 어쨌든 인코딩 된 문자와 배열을 지원하는 하단의 솔루션이 훨씬 더 멍청한 솔루션입니다.
Qwerty

33

사용 URLSearchParams:

var params = new window.URLSearchParams(window.location.search);
console.log(params.get('name'));

호환성에주의하십시오 (대부분 괜찮지 만 IE와 Edge는 이야기가 다를 수 있습니다. 호환 가능한 참조는 https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams )


대부분의 브라우저가 이것을 사용할 수있는 것은 아닙니다.
saf21

URLSearchParams는 특수 문자 "+"를 공백으로 바꿉니다. 따라서 URL 매개 변수에 "+"가 있으면 대체됩니다.
Growler


10

아마도 당신은 치과 의사 JS 에게 모양 을주고 싶 습니까? (면책 조항 : 코드를 작성했습니다)

암호:

document.URL == "http://helloworld.com/quotes?id=1337&author=kelvin&message=hello"
var currentURL = document.URL;
var params = currentURL.extract();
console.log(params.id); // 1337
console.log(params.author) // "kelvin"
console.log(params.message) // "hello"

Dentist JS를 사용하면 기본적으로 모든 문자열 (예 : document.URL.extract ())에서 extract () 함수를 호출 할 수 있으며 발견 된 모든 매개 변수의 HashMap을 다시 얻을 수 있습니다. 또한 구분자와 모든 것을 처리하도록 사용자 정의 할 수 있습니다.

축소 버전 <1kb


5

이것이 도움이되기를 바랍니다.

 <script type="text/javascript">
   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;
   }

    $(window).load(function() {
      var param = getParameters();
      if (typeof param.sent !== "undefined") {
        // Do something.
      }
    });
</script>

5

function GetRequestParam(param)
{
	var res = null;
	try{
		var qs = decodeURIComponent(window.location.search.substring(1));//get everything after then '?' in URI
		var ar = qs.split('&');
		$.each(ar, function(a, b){
			var kv = b.split('=');
			if(param === kv[0]){
				res = kv[1];
				return false;//break loop
			}
		});
	}catch(e){}
	return res;
}



3

이 위대한 도서관이 있습니다 : https://github.com/allmarkedup/purl

간단하게 할 수 있습니다

url = 'http://example.com?sent=yes';
sent = $.url(url).param('sent');
if (typeof sent != 'undefined') { // sent exists
   if (sent == 'yes') { // sent is equal to yes
     // ...
   }
}

예는 jQuery를 사용한다고 가정합니다. 일반 자바 스크립트처럼 사용할 수도 있습니다. 구문은 약간 다릅니다.


1
이 라이브러리는 더 이상 유지 관리되지 않지만 사용하지만 훌륭합니다. 작성자가 예제에 포함 했으므로 attr not attr을 사용하여 해당 쿼리 문자열 매개 변수를 가져와야합니다.
액션 Dan

3

이것은 과잉 일 수 있지만 URI.js 라는 URI 구문 분석에 사용할 수있는 매우 인기있는 라이브러리가 있습니다 .

var uri = "http://example.org/foo.html?technology=jquery&technology=css&blog=stackoverflow";
var components = URI.parse(uri);
var query = URI.parseQuery(components['query']);
document.getElementById("result").innerHTML = "URI = " + uri;
document.getElementById("result").innerHTML += "<br>technology = " + query['technology'];

// If you look in your console, you will see that this library generates a JS array for multi-valued queries!
console.log(query['technology']);
console.log(query['blog']);
<script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.17.0/URI.min.js"></script>

<span id="result"></span>


3

그래서 당신은 어떤 URL을 사용하고 가치를 얻을 수 있습니다

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

사용 예

// query string: ?first=value1&second=&value2
var foo = getParameterByName('first'); // "value1"
var bar = getParameterByName('second'); // "value2" 

참고 : 매개 변수가 여러 번 존재하면 (? first = value1 & second = value2) 첫 번째 값 (value1)과 두 번째 값을 (value2)로 얻습니다.


2

이것은 당신에게 좋은 물건을 줄 것입니다.

    function queryParameters () {
        var result = {};

        var params = window.location.search.split(/\?|\&/);

        params.forEach( function(it) {
            if (it) {
                var param = it.split("=");
                result[param[0]] = param[1];
            }
        });

        return result;
    }

그리고;

    if (queryParameters().sent === 'yes') { .....

split (/ \? | \ & /)이 의미
Selva Ganapathi

2

이것은 Gazoris 의 답변을 기반으로 하지만 URL은 매개 변수를 디코딩하여 숫자와 문자 이외의 데이터가 포함 된 경우 사용할 수 있습니다.

function urlParam(name){
    var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
    // Need to decode the URL parameters, including putting in a fix for the plus sign
    // https://stackoverflow.com/a/24417399
    return results ? decodeURIComponent(results[1].replace(/\+/g, '%20')) : null;
}

2

URI.js 라이브러리 를 사용하는 또 다른 예가 있습니다.

예는 요청한대로 정확하게 질문에 대답합니다.

var url = 'http://example.com?sent=yes';
var urlParams = new URI(url).search(true);
// 1. Does sent exist?
var sendExists = urlParams.sent !== undefined;
// 2. Is it equal to "yes"?
var sendIsEqualtToYes = urlParams.sent == 'yes';

// output results in readable form
// not required for production
if (sendExists) {
  console.log('Url has "sent" param, its value is "' + urlParams.sent + '"');
  if (urlParams.sent == 'yes') {
    console.log('"Sent" param is equal to "yes"');
  } else {
    console.log('"Sent" param is not equal to "yes"');
  }
} else {
  console.log('Url hasn\'t "sent" param');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.18.2/URI.min.js"></script>


2
http://example.com?sent=yes

여기에 최고의 솔루션 입니다.

function getUrlParameter(name) {
    name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
    var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
    var results = regex.exec(location.href);
    return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, '    '));
};

위의 함수를 사용하면 개별 매개 변수 값을 얻을 수 있습니다.

getUrlParameter('sent');

완벽한 답변!
Srijani Ghosh

1

Sameer의 답변의 커피 스크립트 버전

getUrlParameter = (sParam) ->
  sPageURL = window.location.search.substring(1)
  sURLVariables = sPageURL.split('&')
  i = 0
  while i < sURLVariables.length
    sParameterName = sURLVariables[i].split('=')
    if sParameterName[0] == sParam
      return sParameterName[1]
    i++

1

Sameer의 답변이 약간 개선되어 호출 할 때마다 모든 매개 변수를 파싱하고 반복하지 않도록 캐시 매개 변수를 클로저로 만듭니다.

var getURLParam = (function() {
    var paramStr = decodeURIComponent(window.location.search).substring(1);
    var paramSegs = paramStr.split('&');
    var params = [];
    for(var i = 0; i < paramSegs.length; i++) {
        var paramSeg = paramSegs[i].split('=');
        params[paramSeg[0]] = paramSeg[1];
    }
    console.log(params);
    return function(key) {
        return params[key];
    }
})();


1

바닐라 자바 ​​스크립트를 사용하면 쉽게 매개 변수 (location.search)를 가져 와서 하위 문자열 (?없이)을 가져 와서 '&'로 나누어 배열로 바꿀 수 있습니다.

urlParams를 반복 할 때 '='로 문자열을 다시 분할하고 'params'객체에 object [elmement [0]] = element [1]로 추가 할 수 있습니다. 매우 간단하고 액세스하기 쉽습니다.

http://www.website.com/?error=userError&type=handwritten

            var urlParams = location.search.substring(1).split('&'),
                params = {};

            urlParams.forEach(function(el){
                var tmpArr = el.split('=');
                params[tmpArr[0]] = tmpArr[1];
            });


            var error = params['error'];
            var type = params['type'];

1

filename = "p & g.html"& uid = 66과 같은 &에 URL 매개 변수가 있으면 어떻게됩니까?

이 경우 첫 번째 기능이 제대로 작동하지 않습니다. 그래서 코드를 수정했습니다.

function getUrlParameter(sParam) {
    var sURLVariables = window.location.search.substring(1).split('&'), sParameterName, i;

    for (i = 0; i < sURLVariables.length; i++) {
        sParameterName = sURLVariables[i].split('=');

        if (sParameterName[0] === sParam) {
            return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
        }
    }
}

1

분명히 나는 ​​대답이 많은 질문에 대한 답변을 추가하고 있지만 다음과 같은 장점이 있습니다.

-jQuery를 포함한 외부 라이브러리에 의존하지 않음

- 'String'을 확장하여 전역 함수 네임 스페이스를 오염시키지 않습니다.

-일치하는 발견 후 글로벌 데이터를 작성하지 않고 불필요한 처리를 수행

-인코딩 문제 처리 및 인코딩되지 않은 매개 변수 이름 수락 (가정)

-명시적인 for루프 피하기

String.prototype.urlParamValue = function() {
    var desiredVal = null;
    var paramName = this.valueOf();
    window.location.search.substring(1).split('&').some(function(currentValue, _, _) {
        var nameVal = currentValue.split('=');
        if ( decodeURIComponent(nameVal[0]) === paramName ) {
            desiredVal = decodeURIComponent(nameVal[1]);
            return true;
        }
        return false;
    });
    return desiredVal;
};

그런 다음 다음과 같이 사용하십시오.

var paramVal = "paramName".urlParamValue() // null if no match

1

특정 URL에서 특정 매개 변수를 찾으려면 다음을 수행하십시오.

function findParam(url, param){
  var check = "" + param;
  if(url.search(check )>=0){
      return url.substring(url.search(check )).split('&')[0].split('=')[1];
  }
}  

var url = "http://www.yourdomain.com/example?id=1&order_no=114&invoice_no=254";  
alert(findParam(url,"order_no"));

0

jQuery와 JSON을 사용하는 또 다른 솔루션이므로 객체를 통해 매개 변수 값에 액세스 할 수 있습니다.

var loc = window.location.href;
var param = {};
if(loc.indexOf('?') > -1)
{
    var params = loc.substr(loc.indexOf('?')+1, loc.length).split("&");

    var stringJson = "{";
    for(var i=0;i<params.length;i++)
    {
        var propVal = params[i].split("=");
        var paramName = propVal[0];
        var value = propVal[1];
        stringJson += "\""+paramName+"\": \""+value+"\"";
        if(i != params.length-1) stringJson += ",";
    }
    stringJson += "}";
    // parse string with jQuery parseJSON
    param = $.parseJSON(stringJson);
}

귀하의 URL이 http://example.com/?search=hello+world&language=en&page=3

그 후 다음과 같은 매개 변수를 사용하면됩니다.

param.language

돌려 주다

en

가장 유용한 사용법은 페이지로드시이를 실행하고 전역 변수를 사용하여 필요할 때마다 매개 변수를 사용하는 것입니다.

매개 변수에 숫자 값이 포함되어 있으면 값을 구문 분석하십시오.

parseInt(param.page)

매개 변수가 없으면 param빈 개체입니다.



-1

이것을 사용하십시오

$.urlParam = function(name) {
  var results = new RegExp('[\?&amp;]' + name + '=([^&amp;#]*)').exec(window.location.href);
  return results[1] || 0;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.