누구나 쿼리 문자열 매개 변수를 처리하기 위해 jQuery 확장을 작성하는 좋은 방법을 알고 있습니까? 기본적으로 jQuery 매직 ($)
기능 을 확장하여 다음과 같이 할 수 있습니다.
$('?search').val();
다음 URL에서 “test”값을 제공합니다 http://www.example.com/index.php?search=test
.
jQuery와 Javascript 에서이 작업을 수행 할 수있는 많은 기능을 보았지만 실제로는 위에 표시된 그대로 작동하도록 jQuery를 확장하고 싶습니다. jQuery 플러그인을 찾지 않고 jQuery 메소드의 확장을 찾고 있습니다.
답변
수년간의 추악한 문자열 구문 분석 후에 더 좋은 방법이 있습니다. URLSearchParams 이 새로운 API를 사용하여 위치에서 값을 얻는 방법을 살펴 보겠습니다!
// “? post = 1234 & action = edit”가정
var urlParams = new URLSearchParams(window.location.search);
console.log(urlParams.has('post')); // true
console.log(urlParams.get('action')); // "edit"
console.log(urlParams.getAll('action')); // ["edit"]
console.log(urlParams.toString()); // "?post=1234&action=edit"
console.log(urlParams.append('active', '1')); // "?
post=1234&action=edit&active=1"
업데이트 : IE는 지원되지 않습니다
URLSearchParams 대신 아래 답변 에서이 기능을 사용하십시오.
$.urlParam = function (name) {
var results = new RegExp('[\?&]' + name + '=([^&#]*)')
.exec(window.location.search);
return (results !== null) ? results[1] || 0 : false;
}
console.log($.urlParam('action')); //edit
답변
왜 jQuery를 확장해야합니까? jQuery를 확장하고 전역 기능을 갖는 것의 이점은 무엇입니까?
function qs(key) {
key = key.replace(/[*+?^$.\[\]{}()|\\\/]/g, "\\$&"); // escape RegEx meta chars
var match = location.search.match(new RegExp("[?&]"+key+"=([^&]+)(&|$)"));
return match && decodeURIComponent(match[1].replace(/\+/g, " "));
}
http://jsfiddle.net/gilly3/sgxcL/
다른 방법은 전체 쿼리 문자열을 구문 분석하고 나중에 사용할 수 있도록 개체에 값을 저장하는 것입니다. 이 접근법은 정규 표현식을 요구하지 않고 window.location
객체를 확장 하지만 전역 변수를 쉽게 사용할 수 있습니다.
location.queryString = {};
location.search.substr(1).split("&").forEach(function (pair) {
if (pair === "") return;
var parts = pair.split("=");
location.queryString[parts[0]] = parts[1] &&
decodeURIComponent(parts[1].replace(/\+/g, " "));
});
http://jsfiddle.net/gilly3/YnCeu/
이 버전은 또한 Array.forEach()
IE7 및 IE8에서 기본적으로 사용할 수없는를 사용합니다. MDN의 구현을 사용하여 추가 하거나 jQuery를 $.each()
대신 사용할 수 있습니다 .
답변
JQuery jQuery-URL-Parser 플러그인은 동일한 작업을 수행합니다. 예를 들어 검색어 문자열 매개 변수 의 값을 검색 하려면
$.url().param('search');
이 라이브러리는 적극적으로 유지 관리되지 않습니다. 동일한 플러그인의 작성자가 제안한대로 URI.js 를 사용할 수 있습니다 .
또는 대신 js-url을 사용할 수 있습니다 . 아래의 것과 매우 유사합니다.
따라서 다음과 같은 쿼리 매개 변수에 액세스 할 수 있습니다 $.url('?search')
답변
SitePoint에서 친구들로부터이 보석을 찾았습니다.
https://www.sitepoint.com/url-parameters-jquery/ .
PURE jQuery 사용 방금 이것을 사용했고 효과가있었습니다. 예를 들어 그것을 약간 조정했습니다.
//URL is http://www.example.com/mypage?ref=registration&email=bobo@example.com
$.urlParam = function (name) {
var results = new RegExp('[\?&]' + name + '=([^&#]*)')
.exec(window.location.search);
return (results !== null) ? results[1] || 0 : false;
}
console.log($.urlParam('ref')); //registration
console.log($.urlParam('email')); //bobo@example.com
당신이 원하는대로 사용하십시오.
답변
이것은 내 코드 샘플이 아니지만 과거에 사용했습니다.
//First Add this to extend jQuery
$.extend({
getUrlVars: function(){
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;
},
getUrlVar: function(name){
return $.getUrlVars()[name];
}
});
//Second call with this:
// Get object of URL parameters
var allVars = $.getUrlVars();
// Getting URL var by its name
var byName = $.getUrlVar('name');
답변
쿼리 매개 변수의 이름 만 구문 분석 해야하는 작은 함수를 작성했습니다. 따라서? Project = 12 & Mode = 200 & date = 2013-05-27이 있고 ‘Mode’매개 변수를 원하면 ‘Mode’이름 만 함수로 구문 분석하면됩니다.
function getParameterByName( name ){
var regexS = "[\\?&]"+name+"=([^&#]*)",
regex = new RegExp( regexS ),
results = regex.exec( window.location.search );
if( results == null ){
return "";
} else{
return decodeURIComponent(results[1].replace(/\+/g, " "));
}
}
// example caller:
var result = getParameterByName('Mode');
답변
위의 @Rob Neild의 대답을 바탕으로, 여기에는 디코딩 된 쿼리 문자열 매개 변수의 간단한 객체 (% 20 등 없음)를 반환하는 순수한 JS 적응이 있습니다.
function parseQueryString () {
var parsedParameters = {},
uriParameters = location.search.substr(1).split('&');
for (var i = 0; i < uriParameters.length; i++) {
var parameter = uriParameters[i].split('=');
parsedParameters[parameter[0]] = decodeURIComponent(parameter[1]);
}
return parsedParameters;
}