JavaScript를 사용하여 URL에 매개 변수 추가
AJAX 호출을 사용하는 웹 애플리케이션에서 요청을 제출하고 URL 끝에 매개 변수를 추가해야합니다. 예를 들면 다음과 같습니다.
원래 URL :
결과 URL :
http : //server/myapp.php? id = 10 & enabled = true
각 매개 변수를보고있는 URL을 구문 분석 한 후 새 매개 변수를 추가하거나 이미 존재하는 경우 값을 업데이트하는 JavaScript 함수를 찾습니다.
적응해야 할 기본 구현은 다음과 같습니다.
function insertParam(key, value)
{
key = encodeURI(key); value = encodeURI(value);
var kvp = document.location.search.substr(1).split('&');
var i=kvp.length; var x; while(i--)
{
x = kvp[i].split('=');
if (x[0]==key)
{
x[1] = value;
kvp[i] = x.join('=');
break;
}
}
if(i<0) {kvp[kvp.length] = [key,value].join('=');}
//this will reload the page, it's likely better to store this until finished
document.location.search = kvp.join('&');
}
이것은 정규식 또는 검색 기반 솔루션보다 약 두 배 빠르지 만 쿼리 문자열의 길이와 일치하는 색인에 완전히 의존합니다.
완료를 위해 벤치마킹 한 느린 정규식 방법 (약 + 150 % 느림)
function insertParam2(key,value)
{
key = encodeURIComponent(key); value = encodeURIComponent(value);
var s = document.location.search;
var kvp = key+"="+value;
var r = new RegExp("(&|\\?)"+key+"=[^\&]*");
s = s.replace(r,"$1"+kvp);
if(!RegExp.$1) {s += (s.length>0 ? '&' : '?') + kvp;};
//again, do what you will here
document.location.search = s;
}
다음 중 하나를 사용할 수 있습니다.
- https://developer.mozilla.org/en-US/docs/Web/API/URL
- https://developer.mozilla.org/en/docs/Web/API/URLSearchParams
예:
var url = new URL("http://foo.bar/?x=1&y=2");
// If your expected result is "http://foo.bar/?x=1&y=2&x=42"
url.searchParams.append('x', 42);
// If your expected result is "http://foo.bar/?x=42&y=2"
url.searchParams.set('x', 42);
귀하의 기여에 감사드립니다. annakata 코드를 사용 하고 URL에 쿼리 문자열이없는 경우도 포함하도록 수정했습니다. 이것이 도움이되기를 바랍니다.
function insertParam(key, value) {
key = escape(key); value = escape(value);
var kvp = document.location.search.substr(1).split('&');
if (kvp == '') {
document.location.search = '?' + key + '=' + value;
}
else {
var i = kvp.length; var x; while (i--) {
x = kvp[i].split('=');
if (x[0] == key) {
x[1] = value;
kvp[i] = x.join('=');
break;
}
}
if (i < 0) { kvp[kvp.length] = [key, value].join('='); }
//this will reload the page, it's likely better to store this until finished
document.location.search = kvp.join('&');
}
}
이것은 매우 간단한 해결책입니다. 매개 변수 존재를 제어하지 않으며 기존 값을 변경하지 않습니다. 매개 변수를 추가하여 백엔드 코드에서 최신 값을 얻을 수 있습니다.
function addParameterToURL(param){
_url = location.href;
_url += (_url.split('?')[1] ? '&':'?') + param;
return _url;
}
마이크로 최적화 된 성능 대신 가독성과 코드 라인 수를 줄이면서 크게 단순화 된 버전이 있습니다 (현실성으로 인해 현재 문서의 위치에서 작동하면서 현실적으로 몇 밀리 초 차이에 대해 이야기하고 있습니다) ) 페이지에서 한 번 실행됩니다.
/**
* Add a URL parameter (or changing it if it already exists)
* @param {search} string this is typically document.location.search
* @param {key} string the key to set
* @param {val} string value
*/
var addUrlParam = function(search, key, val){
var newParam = key + '=' + val,
params = '?' + newParam;
// If the "search" string exists, then build params from it
if (search) {
// Try to replace an existance instance
params = search.replace(new RegExp('([?&])' + key + '[^&]*'), '$1' + newParam);
// If nothing was replaced, then add the new param to the end
if (params === search) {
params += '&' + newParam;
}
}
return params;
};
그런 다음 이것을 다음과 같이 사용하십시오.
document.location.pathname + addUrlParam(document.location.search, 'foo', 'bar');
/**
* Add a URL parameter
* @param {string} url
* @param {string} param the key to set
* @param {string} value
*/
var addParam = function(url, param, value) {
param = encodeURIComponent(param);
var a = document.createElement('a');
param += (value ? "=" + encodeURIComponent(value) : "");
a.href = url;
a.search += (a.search ? "&" : "") + param;
return a.href;
}
/**
* Add a URL parameter (or modify if already exists)
* @param {string} url
* @param {string} param the key to set
* @param {string} value
*/
var addOrReplaceParam = function(url, param, value) {
param = encodeURIComponent(param);
var r = "([&?]|&)" + param + "\\b(?:=(?:[^&#]*))*";
var a = document.createElement('a');
var regex = new RegExp(r);
var str = param + (value ? "=" + encodeURIComponent(value) : "");
a.href = url;
var q = a.search.replace(regex, "$1"+str);
if (q === a.search) {
a.search += (a.search ? "&" : "") + str;
} else {
a.search = q;
}
return a.href;
}
url = "http://www.example.com#hashme";
newurl = addParam(url, "ciao", "1");
alert(newurl);
그리고 쿼리 문자열에 추가하기 전에 매개 변수를 인코딩해야합니다.
나는 이것을하는 '클래스'를 가지고 있으며 여기 있습니다 :
function QS(){
this.qs = {};
var s = location.search.replace( /^\?|#.*$/g, '' );
if( s ) {
var qsParts = s.split('&');
var i, nv;
for (i = 0; i < qsParts.length; i++) {
nv = qsParts[i].split('=');
this.qs[nv[0]] = nv[1];
}
}
}
QS.prototype.add = function( name, value ) {
if( arguments.length == 1 && arguments[0].constructor == Object ) {
this.addMany( arguments[0] );
return;
}
this.qs[name] = value;
}
QS.prototype.addMany = function( newValues ) {
for( nv in newValues ) {
this.qs[nv] = newValues[nv];
}
}
QS.prototype.remove = function( name ) {
if( arguments.length == 1 && arguments[0].constructor == Array ) {
this.removeMany( arguments[0] );
return;
}
delete this.qs[name];
}
QS.prototype.removeMany = function( deleteNames ) {
var i;
for( i = 0; i < deleteNames.length; i++ ) {
delete this.qs[deleteNames[i]];
}
}
QS.prototype.getQueryString = function() {
var nv, q = [];
for( nv in this.qs ) {
q[q.length] = nv+'='+this.qs[nv];
}
return q.join( '&' );
}
QS.prototype.toString = QS.prototype.getQueryString;
//examples
//instantiation
var qs = new QS;
alert( qs );
//add a sinle name/value
qs.add( 'new', 'true' );
alert( qs );
//add multiple key/values
qs.add( { x: 'X', y: 'Y' } );
alert( qs );
//remove single key
qs.remove( 'new' )
alert( qs );
//remove multiple keys
qs.remove( ['x', 'bogus'] )
alert( qs );
toString 메서드를 재정의 했으므로 QS :: getQueryString을 호출 할 필요가 없습니다. QS :: toString을 사용하거나 예제에서했던 것처럼 문자열로 강제 변환되는 객체에 의존합니다.
매개 변수로 장식하려는 URL이있는 문자열이 있으면 다음을 시도하십시오.
urlstring += ( urlstring.match( /[\?]/g ) ? '&' : '?' ) + 'param=value';
이것은 의미 합니까? 매개 변수의 접두사가되지만 이미 ? 에서 &urlstring
보다 접두사가됩니다.
encodeURI( paramvariable )
매개 변수를 하드 코딩하지 않은 경우 에도 권장 하지만 매개 변수는 paramvariable
; 또는 재미있는 캐릭터가 있다면.
함수 사용법은 javascript URL 인코딩 을 참조하십시오 encodeURI
.
이것은 쿼리 매개 변수를 추가하는 간단한 방법입니다.
const query = new URLSearchParams(window.location.search);
query.append("enabled", "true");
그리고 그것은 더 여기에 있습니다 .
지원 사양에 유의하십시오 .
https://github.com/derek-watson/jsUri를 확인 하십시오.
자바 스크립트에서 URI 및 쿼리 문자열 조작.
이 프로젝트는 Steven Levithan의 우수한 parseUri 정규 표현식 라이브러리를 통합합니다. 모든 모양과 크기의 URL을 유효하게 구문 분석 할 수 있지만 유효하지 않거나 무시할 수 있습니다.
언젠가 우리 ?
는 최종 URL에서 볼 수 있듯이 결과를 생성하는 솔루션을 발견했습니다 file.php?&foo=bar
. 나는 내가 원하는대로 완벽하게 자신의 솔루션 작업을 생각해 냈습니다!
location.origin + location.pathname + location.search + (location.search=='' ? '?' : '&') + 'lang=ar'
참고 : location.origin 은 IE에서 작동하지 않습니다 . 여기에 수정 사항이 있습니다.
다음 기능은 URL에 매개 변수를 추가, 업데이트 및 삭제하는 데 도움이됩니다.
// example1and
var myURL = '/search';
myURL = updateUrl(myURL,'location','california');
console.log('added location...' + myURL);
//added location.../search?location=california
myURL = updateUrl(myURL,'location','new york');
console.log('updated location...' + myURL);
//updated location.../search?location=new%20york
myURL = updateUrl(myURL,'location');
console.log('removed location...' + myURL);
//removed location.../search
// 예제 2
var myURL = '/search?category=mobile';
myURL = updateUrl(myURL,'location','california');
console.log('added location...' + myURL);
//added location.../search?category=mobile&location=california
myURL = updateUrl(myURL,'location','new york');
console.log('updated location...' + myURL);
//updated location.../search?category=mobile&location=new%20york
myURL = updateUrl(myURL,'location');
console.log('removed location...' + myURL);
//removed location.../search?category=mobile
// example3
var myURL = '/search?location=texas';
myURL = updateUrl(myURL,'location','california');
console.log('added location...' + myURL);
//added location.../search?location=california
myURL = updateUrl(myURL,'location','new york');
console.log('updated location...' + myURL);
//updated location.../search?location=new%20york
myURL = updateUrl(myURL,'location');
console.log('removed location...' + myURL);
//removed location.../search
// 예제 4
var myURL = '/search?category=mobile&location=texas';
myURL = updateUrl(myURL,'location','california');
console.log('added location...' + myURL);
//added location.../search?category=mobile&location=california
myURL = updateUrl(myURL,'location','new york');
console.log('updated location...' + myURL);
//updated location.../search?category=mobile&location=new%20york
myURL = updateUrl(myURL,'location');
console.log('removed location...' + myURL);
//removed location.../search?category=mobile
// 예제 5
var myURL = 'https://example.com/search?location=texas#fragment';
myURL = updateUrl(myURL,'location','california');
console.log('added location...' + myURL);
//added location.../search?location=california#fragment
myURL = updateUrl(myURL,'location','new york');
console.log('updated location...' + myURL);
//updated location.../search?location=new%20york#fragment
myURL = updateUrl(myURL,'location');
console.log('removed location...' + myURL);
//removed location.../search#fragment
기능은 다음과 같습니다.
function updateUrl(url,key,value){
if(value!==undefined){
value = encodeURI(value);
}
var hashIndex = url.indexOf("#")|0;
if (hashIndex === -1) hashIndex = url.length|0;
var urls = url.substring(0, hashIndex).split('?');
var baseUrl = urls[0];
var parameters = '';
var outPara = {};
if(urls.length>1){
parameters = urls[1];
}
if(parameters!==''){
parameters = parameters.split('&');
for(k in parameters){
var keyVal = parameters[k];
keyVal = keyVal.split('=');
var ekey = keyVal[0];
var evalue = '';
if(keyVal.length>1){
evalue = keyVal[1];
}
outPara[ekey] = evalue;
}
}
if(value!==undefined){
outPara[key] = value;
}else{
delete outPara[key];
}
parameters = [];
for(var k in outPara){
parameters.push(k + '=' + outPara[k]);
}
var finalUrl = baseUrl;
if(parameters.length>0){
finalUrl += '?' + parameters.join('&');
}
return finalUrl + url.substring(hashIndex);
}
이것은 내 자신의 시도 였지만 annakata의 답변을 훨씬 깨끗하게 사용합니다.
function AddUrlParameter(sourceUrl, parameterName, parameterValue, replaceDuplicates)
{
if ((sourceUrl == null) || (sourceUrl.length == 0)) sourceUrl = document.location.href;
var urlParts = sourceUrl.split("?");
var newQueryString = "";
if (urlParts.length > 1)
{
var parameters = urlParts[1].split("&");
for (var i=0; (i < parameters.length); i++)
{
var parameterParts = parameters[i].split("=");
if (!(replaceDuplicates && parameterParts[0] == parameterName))
{
if (newQueryString == "")
newQueryString = "?";
else
newQueryString += "&";
newQueryString += parameterParts[0] + "=" + parameterParts[1];
}
}
}
if (newQueryString == "")
newQueryString = "?";
else
newQueryString += "&";
newQueryString += parameterName + "=" + parameterValue;
return urlParts[0] + newQueryString;
}
또한 stackoverflow의 다른 게시물 에서이 jQuery 플러그인을 찾았으며 더 많은 유연성이 필요한 경우 다음을 사용할 수 있습니다. http://plugins.jquery.com/project/query-object
나는 코드가 테스트 될 것이라고 생각할 것이다.
return $.query.parse(sourceUrl).set(parameterName, parameterValue).toString();
이것은 Node.js와 같은 서버 측의 기본 URL 매개 변수 추가 또는 업데이트와 관련하여 사용하는 것입니다.
커피 스크립트 :
###
@method addUrlParam Adds parameter to a given url. If the parameter already exists in the url is being replaced.
@param {string} url
@param {string} key Parameter's key
@param {string} value Parameter's value
@returns {string} new url containing the parameter
###
addUrlParam = (url, key, value) ->
newParam = key+"="+value
result = url.replace(new RegExp('(&|\\?)' + key + '=[^\&|#]*'), '$1' + newParam)
if result is url
result = if url.indexOf('?') != -1 then url.split('?')[0] + '?' + newParam + '&' + url.split('?')[1]
else if url.indexOf('#') != -1 then url.split('#')[0] + '?' + newParam + '#' + url.split('#')[1]
else url + '?' + newParam
return result
자바 스크립트 :
function addUrlParam(url, key, value) {
var newParam = key+"="+value;
var result = url.replace(new RegExp("(&|\\?)"+key+"=[^\&|#]*"), '$1' + newParam);
if (result === url) {
result = (url.indexOf("?") != -1 ? url.split("?")[0]+"?"+newParam+"&"+url.split("?")[1]
: (url.indexOf("#") != -1 ? url.split("#")[0]+"?"+newParam+"#"+ url.split("#")[1]
: url+'?'+newParam));
}
return result;
}
var url = "http://www.example.com?foo=bar&ciao=3&doom=5#hashme";
result1.innerHTML = addUrlParam(url, "ciao", "1");
<p id="result1"></p>
const urlParams = new URLSearchParams(window.location.search);
urlParams.set('order', 'date');
window.location.search = urlParams;
.set 첫 번째 agrument가 키이고 두 번째 agrument가 값입니다.
나는 Mehmet Fatih Yıldız의 답변조차도 전체 질문에 대답하지 않았습니다.
그의 대답과 같은 줄에 다음 코드를 사용합니다.
"매개 변수 존재를 제어하지 않으며 기존 값을 변경하지 않습니다. 끝에 매개 변수를 추가합니다."
/** add a parameter at the end of the URL. Manage '?'/'&', but not the existing parameters.
* does escape the value (but not the key)
*/
function addParameterToURL(_url,_key,_value){
var param = _key+'='+escape(_value);
var sep = '&';
if (_url.indexOf('?') < 0) {
sep = '?';
} else {
var lastChar=_url.slice(-1);
if (lastChar == '&') sep='';
if (lastChar == '?') sep='';
}
_url += sep + param;
return _url;
}
그리고 테스터 :
/*
function addParameterToURL_TESTER_sub(_url,key,value){
//log(_url);
log(addParameterToURL(_url,key,value));
}
function addParameterToURL_TESTER(){
log('-------------------');
var _url ='www.google.com';
addParameterToURL_TESTER_sub(_url,'key','value');
addParameterToURL_TESTER_sub(_url,'key','Text Value');
_url ='www.google.com?';
addParameterToURL_TESTER_sub(_url,'key','value');
_url ='www.google.com?A=B';
addParameterToURL_TESTER_sub(_url,'key','value');
_url ='www.google.com?A=B&';
addParameterToURL_TESTER_sub(_url,'key','value');
_url ='www.google.com?A=1&B=2';
addParameterToURL_TESTER_sub(_url,'key','value');
}//*/
나는 함께 갈 것 이 JS에서 핸들 URL에 대한 작지만 완전한 라이브러리 :
https://github.com/Mikhus/jsurl
가장 쉬운 솔루션, 이미 태그가 있는지 여부에 관계없이 작동하고 자동으로 제거하여 동일한 태그를 계속 추가하지 않고 재미있게 보내십시오.
function changeURL(tag)
{
if(window.location.href.indexOf("?") > -1) {
if(window.location.href.indexOf("&"+tag) > -1){
var url = window.location.href.replace("&"+tag,"")+"&"+tag;
}
else
{
var url = window.location.href+"&"+tag;
}
}else{
if(window.location.href.indexOf("?"+tag) > -1){
var url = window.location.href.replace("?"+tag,"")+"?"+tag;
}
else
{
var url = window.location.href+"?"+tag;
}
}
window.location = url;
}
그때
changeURL("i=updated");
링크 또는 다른 곳의 URL로 혼란스러워하는 경우 해시도 고려해야합니다. 이해하기 쉬운 솔루션은 다음과 같습니다. 아마도 정규 표현식을 사용하기 때문에 가장 빠르지 는 않지만 99.999 %의 경우 차이는 중요하지 않습니다!
function addQueryParam( url, key, val ){
var parts = url.match(/([^?#]+)(\?[^#]*)?(\#.*)?/);
var url = parts[1];
var qs = parts[2] || '';
var hash = parts[3] || '';
if ( !qs ) {
return url + '?' + key + '=' + encodeURIComponent( val ) + hash;
} else {
var qs_parts = qs.substr(1).split("&");
var i;
for (i=0;i<qs_parts.length;i++) {
var qs_pair = qs_parts[i].split("=");
if ( qs_pair[0] == key ){
qs_parts[ i ] = key + '=' + encodeURIComponent( val );
break;
}
}
if ( i == qs_parts.length ){
qs_parts.push( key + '=' + encodeURIComponent( val ) );
}
return url + '?' + qs_parts.join('&') + hash;
}
}
Vianney Bajart의 대답 은 맞습니다. 그러나 URL 은 포트, 호스트, 경로 및 쿼리가 포함 된 전체 URL이있는 경우에만 작동합니다.
new URL('http://server/myapp.php?id=10&enabled=true')
그리고 URLSearchParams 는 쿼리 문자열 만 전달하면 작동합니다.
new URLSearchParams('?id=10&enabled=true')
불완전하거나 상대적인 URL이 있고 기본 URL을 신경 쓰지 않는 경우 분할 ?
하여 쿼리 문자열을 가져 와서 나중에 다음과 같이 결합 할 수 있습니다 .
function setUrlParams(url, key, value) {
url = url.split('?');
usp = new URLSearchParams(url[1]);
usp.set(key, value);
url[1] = usp.toString();
return url.join('?');
}
let url = 'myapp.php?id=10';
url = setUrlParams(url, 'enabled', true); // url = 'myapp.php?id=10&enabled=true'
url = setUrlParams(url, 'id', 11); // url = 'myapp.php?id=11&enabled=true'
Internet Explorer와 호환되지 않습니다.
@Vianney의 답변에 추가 https://stackoverflow.com/a/44160941/6609678
다음과 같이 노드에 내장 URL 모듈을 가져올 수 있습니다
const { URL } = require('url');
예:
Terminal $ node
> const { URL } = require('url');
undefined
> let url = new URL('', 'http://localhost:1989/v3/orders');
undefined
> url.href
'http://localhost:1989/v3/orders'
> let fetchAll=true, timePeriod = 30, b2b=false;
undefined
> url.href
'http://localhost:1989/v3/orders'
> url.searchParams.append('fetchAll', fetchAll);
undefined
> url.searchParams.append('timePeriod', timePeriod);
undefined
> url.searchParams.append('b2b', b2b);
undefined
> url.href
'http://localhost:1989/v3/orders?fetchAll=true&timePeriod=30&b2b=false'
> url.toString()
'http://localhost:1989/v3/orders?fetchAll=true&timePeriod=30&b2b=false'
유용한 링크:
https://developer.mozilla.org/en-US/docs/Web/API/URL https://developer.mozilla.org/en/docs/Web/API/URLSearchParams
좋아, 나는 두 가지 기능을 비교한다. 하나는 나 자신 (regExp)과 다른 하나는 (annakata).
분할 배열 :
function insertParam(key, value)
{
key = escape(key); value = escape(value);
var kvp = document.location.search.substr(1).split('&');
var i=kvp.length; var x; while(i--)
{
x = kvp[i].split('=');
if (x[0]==key)
{
x[1] = value;
kvp[i] = x.join('=');
break;
}
}
if(i<0) {kvp[kvp.length] = [key,value].join('=');}
//this will reload the page, it's likely better to store this until finished
return "&"+kvp.join('&');
}
정규식 방법 :
function addParameter(param, value)
{
var regexp = new RegExp("(\\?|\\&)" + param + "\\=([^\\&]*)(\\&|$)");
if (regexp.test(document.location.search))
return (document.location.search.toString().replace(regexp, function(a, b, c, d)
{
return (b + param + "=" + value + d);
}));
else
return document.location.search+ param + "=" + value;
}
테스트 사례 :
time1=(new Date).getTime();
for (var i=0;i<10000;i++)
{
addParameter("test","test");
}
time2=(new Date).getTime();
for (var i=0;i<10000;i++)
{
insertParam("test","test");
}
time3=(new Date).getTime();
console.log((time2-time1)+" "+(time3-time2));
가장 간단한 해결책 (regexp가 테스트 만 사용하고 .replace 기능을 입력하지 않은 경우)에도 분할보다 느립니다. 정규 표현식은 다소 느리지 만 ...
내가 생각할 수있는 가장 간단한 해결책은 수정 된 URI를 반환하는이 방법입니다. 나는 대부분의 사람들이 너무 열심히 일하는 것처럼 느낍니다.
function setParam(uri, key, val) {
return uri
.replace(new RegExp("([?&]"+key+"(?=[=&#]|$)[^#&]*|(?=#|$))"), "&"+key+"="+encodeURIComponent(val))
.replace(/^([^?&]+)&/, "$1?");
}
최선의 방법으로 쿼리 문자열에 자체 배열 인 매개 변수가 포함되어 있으므로 두 번 이상 나타날 수있는 경우를 언급 할 수 없습니다.
http://example.com?sizes[]=a&sizes[]=b
다음 함수는 내가 업데이트하기 위해 작성한 것 document.location.search
입니다. 키 / 값 쌍 배열을 인수로 사용하여 후자의 수정 된 버전을 반환하여 원하는대로 할 수 있습니다. 나는 이것을 다음과 같이 사용하고있다 :
var newParams = [
['test','123'],
['best','456'],
['sizes[]','XXL']
];
var newUrl = document.location.pathname + insertParams(newParams);
history.replaceState('', '', newUrl);
현재 URL이 다음과 같은 경우 :
http://example.com/index.php?test=replaceme&sizes[]=XL
이것은 당신을 얻을 것입니다
http://example.com/index.php?test=123&sizes[]=XL&sizes[]=XXL&best=456
함수
function insertParams(params) {
var result;
var ii = params.length;
var queryString = document.location.search.substr(1);
var kvps = queryString ? queryString.split('&') : [];
var kvp;
var skipParams = [];
var i = kvps.length;
while (i--) {
kvp = kvps[i].split('=');
if (kvp[0].slice(-2) != '[]') {
var ii = params.length;
while (ii--) {
if (params[ii][0] == kvp[0]) {
kvp[1] = params[ii][1];
kvps[i] = kvp.join('=');
skipParams.push(ii);
}
}
}
}
var ii = params.length;
while (ii--) {
if (skipParams.indexOf(ii) === -1) {
kvps.push(params[ii].join('='));
}
}
result = kvps.length ? '?' + kvps.join('&') : '';
return result;
}
정규 표현식을 너무 느리게 시도하십시오 .
var SetParamUrl = function(_k, _v) {// replace and add new parameters
let arrParams = window.location.search !== '' ? decodeURIComponent(window.location.search.substr(1)).split('&').map(_v => _v.split('=')) : Array();
let index = arrParams.findIndex((_v) => _v[0] === _k);
index = index !== -1 ? index : arrParams.length;
_v === null ? arrParams = arrParams.filter((_v, _i) => _i != index) : arrParams[index] = [_k, _v];
let _search = encodeURIComponent(arrParams.map(_v => _v.join('=')).join('&'));
let newurl = window.location.protocol + "//" + window.location.host + window.location.pathname + (arrParams.length > 0 ? '?' + _search : '');
// window.location = newurl; //reload
if (history.pushState) { // without reload
window.history.pushState({path:newurl}, null, newurl);
}
};
var GetParamUrl = function(_k) {// get parameter by key
let sPageURL = decodeURIComponent(window.location.search.substr(1)),
sURLVariables = sPageURL.split('&').map(_v => _v.split('='));
let _result = sURLVariables.find(_v => _v[0] === _k);
return _result[1];
};
예:
// https://some.com/some_path
GetParamUrl('cat');//undefined
SetParamUrl('cat', "strData");// https://some.com/some_path?cat=strData
GetParamUrl('cat');//strData
SetParamUrl('sotr', "strDataSort");// https://some.com/some_path?cat=strData&sotr=strDataSort
GetParamUrl('sotr');//strDataSort
SetParamUrl('cat', "strDataTwo");// https://some.com/some_path?cat=strDataTwo&sotr=strDataSort
GetParamUrl('cat');//strDataTwo
//remove param
SetParamUrl('cat', null);// https://some.com/some_path?sotr=strDataSort
JS의 새로운 업적과 함께 URL에 쿼리 매개 변수를 추가하는 방법은 다음과 같습니다.
var protocol = window.location.protocol,
host = '//' + window.location.host,
path = window.location.pathname,
query = window.location.search;
var newUrl = protocol + host + path + query + (query ? '&' : '?') + 'param=1';
window.history.pushState({path:newUrl}, '' , newUrl);
이 가능성도 참조하십시오 Moziila URLSearchParams.append ()
이것은 모든 최신 브라우저에서 작동합니다.
function insertParam(key,value) {
if (history.pushState) {
var newurl = window.location.protocol + "//" + window.location.host + window.location.pathname + '?' +key+'='+value;
window.history.pushState({path:newurl},'',newurl);
}
}
모든 쿼리 문자열을 재설정
var params = { params1:"val1", params2:"val2" };
let str = jQuery.param(params);
let uri = window.location.href.toString();
if (uri.indexOf("?") > 0)
uri = uri.substring(0, uri.indexOf("?"));
console.log(uri+"?"+str);
//window.location.href = uri+"?"+str;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
var MyApp = new Class();
MyApp.extend({
utility: {
queryStringHelper: function (url) {
var originalUrl = url;
var newUrl = url;
var finalUrl;
var insertParam = function (key, value) {
key = escape(key);
value = escape(value);
//The previous post had the substr strat from 1 in stead of 0!!!
var kvp = newUrl.substr(0).split('&');
var i = kvp.length;
var x;
while (i--) {
x = kvp[i].split('=');
if (x[0] == key) {
x[1] = value;
kvp[i] = x.join('=');
break;
}
}
if (i < 0) {
kvp[kvp.length] = [key, value].join('=');
}
finalUrl = kvp.join('&');
return finalUrl;
};
this.insertParameterToQueryString = insertParam;
this.insertParams = function (keyValues) {
for (var keyValue in keyValues[0]) {
var key = keyValue;
var value = keyValues[0][keyValue];
newUrl = insertParam(key, value);
}
return newUrl;
};
return this;
}
}
});
여기 내가하는 일이 있습니다. editParams () 함수를 사용하면 매개 변수를 추가, 제거 또는 변경할 수 있으며 내장 된 replaceState () 함수를 사용하여 URL을 업데이트 할 수 있습니다.
window.history.replaceState('object or string', 'Title', 'page.html' + editParams('enable', 'true'));
// background functions below:
// add/change/remove URL parameter
// use a value of false to remove parameter
// returns a url-style string
function editParams (key, value) {
key = encodeURI(key);
var params = getSearchParameters();
if (Object.keys(params).length === 0) {
if (value !== false)
return '?' + key + '=' + encodeURI(value);
else
return '';
}
if (value !== false)
params[key] = encodeURI(value);
else
delete params[key];
if (Object.keys(params).length === 0)
return '';
return '?' + $.map(params, function (value, key) {
return key + '=' + value;
}).join('&');
}
// Get object/associative array of URL parameters
function getSearchParameters () {
var prmstr = window.location.search.substr(1);
return prmstr !== null && prmstr !== "" ? transformToAssocArray(prmstr) : {};
}
// convert parameters from url-style string to associative array
function transformToAssocArray (prmstr) {
var params = {},
prmarr = prmstr.split("&");
for (var i = 0; i < prmarr.length; i++) {
var tmparr = prmarr[i].split("=");
params[tmparr[0]] = tmparr[1];
}
return params;
}
참고 URL : https://stackoverflow.com/questions/486896/adding-a-parameter-to-the-url-with-javascript
'IT story' 카테고리의 다른 글
WiX 설치 프로그램 업그레이드를 구현하는 방법은 무엇입니까? (0) | 2020.04.16 |
---|---|
대문자로 "정적 최종 로거"를 선언해야합니까? (0) | 2020.04.16 |
Rspec :“array.should == another_array”이지만 순서는 신경 쓰지 않습니다 (0) | 2020.04.16 |
라 라벨 5-장인 씨 [ReflectionException] Class SongsTableSeeder가 없습니다 (0) | 2020.04.16 |
linq를 사용하여 구별 선택 (0) | 2020.04.16 |