다음과 같이 GET 매개 변수가있는 URL이 있습니다.
www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5
의 전체 가치를 얻어야합니다 c
. URL을 읽으려고했지만 m2
. JavaScript를 사용하여이 작업을 어떻게 수행합니까?
답변
JavaScript 자체 에는 쿼리 문자열 매개 변수를 처리하기위한 기본 제공 기능이 없습니다.
(현대) 브라우저에서 실행되는 코드는 URL
객체 (브라우저가 JS에 제공하는 API의 일부)를 사용할 수 있습니다 .
var url_string = "http://www.example.com/t.html?a=1&b=3&c=m2-m3-m4-m5"; //window.location.href
var url = new URL(url_string);
var c = url.searchParams.get("c");
console.log(c);
이전 브라우저 (Internet Explorer 포함)의 경우이 polyfill 또는 이전 버전의이 답변의 코드를 사용할 수 있습니다 URL
.
URL location.search
에서 ?
문자 끝까지 또는 조각 식별자 (#foo)의 시작 (둘 중 빠른 것 중 하나)을 제공하는에 액세스 할 수 있습니다 .
그런 다음 다음과 같이 구문 분석 할 수 있습니다.
function parse_query_string(query) {
var vars = query.split("&");
var query_string = {};
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=");
var key = decodeURIComponent(pair[0]);
var value = decodeURIComponent(pair[1]);
// If first entry with this name
if (typeof query_string[key] === "undefined") {
query_string[key] = decodeURIComponent(value);
// If second entry with this name
} else if (typeof query_string[key] === "string") {
var arr = [query_string[key], decodeURIComponent(value)];
query_string[key] = arr;
// If third or later entry with this name
} else {
query_string[key].push(decodeURIComponent(value));
}
}
return query_string;
}
var query_string = "a=1&b=3&c=m2-m3-m4-m5";
var parsed_qs = parse_query_string(query_string);
console.log(parsed_qs.c);
다음을 사용하여 현재 페이지의 URL에서 쿼리 문자열을 얻을 수 있습니다.
var query = window.location.search.substring(1);
var qs = parse_query_string(query);
답변
내가 본 대부분의 구현은 이름과 값을 URL 디코딩하는 것을 놓쳤다.
올바른 URL 디코딩을 수행하는 일반적인 유틸리티 함수는 다음과 같습니다.
function getQueryParams(qs) {
qs = qs.split('+').join(' ');
var params = {},
tokens,
re = /[?&]?([^=]+)=([^&]*)/g;
while (tokens = re.exec(qs)) {
params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
}
return params;
}
//var query = getQueryParams(document.location.search);
//alert(query.foo);
답변
function gup( name, url ) {
if (!url) url = location.href;
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
var regexS = "[\\?&]"+name+"=([^&#]*)";
var regex = new RegExp( regexS );
var results = regex.exec( url );
return results == null ? null : results[1];
}
gup('q', 'hxxp://example.com/?q=abc')
답변
이것은 하나의 매개 변수를 확인하는 쉬운 방법입니다.
URL 예 :
http://myserver/action?myParam=2
자바 스크립트 예제 :
var myParam = location.search.split('myParam=')[1]
URL에 “myParam”이 있으면 변수 myParam에 “2”가 포함되고 그렇지 않으면 정의되지 않습니다.
이 경우 기본값을 원할 수도 있습니다.
var myParam = location.search.split('myParam=')[1] ? location.search.split('myParam=')[1] : 'myDefaultValue';
업데이트 : 이것은 더 잘 작동합니다.
var url = "http://www.example.com/index.php?myParam=384&login=admin"; // or window.location.href for current url
var captured = /myParam=([^&]+)/.exec(url)[1]; // Value is in [1] ('384' in our case)
var result = captured ? captured : 'myDefaultValue';
URL에 매개 변수가 가득 찬 경우에도 올바르게 작동합니다.
답변
브라우저 공급 업체는 URL 및 URLSearchParams를 통해이를 수행하는 기본 방법을 구현했습니다.
let url = new URL('http://www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5');
let searchParams = new URLSearchParams(url.search);
console.log(searchParams.get('c')); // outputs "m2-m3-m4-m5"
Firefox, Opera, Safari, Chrome 및 Edge에서 현재 지원됩니다. 브라우저 지원 목록 은 여기를 참조하십시오 .
https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams
https://developer.mozilla.org/en-US/docs/Web/API/URL/URL
Google 엔지니어 인 Eric Bidelman 은 지원되지 않는 브라우저 에이 폴리 필 을 사용 하도록 권장 합니다.
답변
나는 이것을 아주 쉽게 발견했다.
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,
function(m,key,value) {
vars[key] = value;
});
return vars;
}
그런 다음 다음과 같이 호출하십시오.
var fType = getUrlVars()["type"];
답변
에서 쿼리 문자열을 가져올 수 있으며 location.search
물음표 다음에 모든 것을 나눌 수 있습니다.
var params = {};
if (location.search) {
var parts = location.search.substring(1).split('&');
for (var i = 0; i < parts.length; i++) {
var nv = parts[i].split('=');
if (!nv[0]) continue;
params[nv[0]] = nv[1] || true;
}
}
// Now you can get the parameters you want like so:
var abc = params.abc;