JavaScript를 사용하여 URL 매개 변수 변경 및 기본값 지정
다음 URL이 있습니다.
site.fwx?position=1&archiveid=5000&columns=5&rows=20&sorting=ModifiedTimeAsc
제가 필요한 것은 'rows' url param 값을 제가 지정한 값으로 변경할 수 있는 것입니다. 예를 들어 10입니다.그리고 'rows'가 존재하지 않는 경우 URL 끝에 추가하여 이미 지정한 값을 추가해야 합니다(10).
함수를 구성하기 위해 Sujoy의 코드를 확장했습니다.
/**
* http://stackoverflow.com/a/10997390/11236
*/
function updateURLParameter(url, param, paramVal){
var newAdditionalURL = "";
var tempArray = url.split("?");
var baseURL = tempArray[0];
var additionalURL = tempArray[1];
var temp = "";
if (additionalURL) {
tempArray = additionalURL.split("&");
for (var i=0; i<tempArray.length; i++){
if(tempArray[i].split('=')[0] != param){
newAdditionalURL += temp + tempArray[i];
temp = "&";
}
}
}
var rows_txt = temp + "" + param + "=" + paramVal;
return baseURL + "?" + newAdditionalURL + rows_txt;
}
함수 호출:
var newURL = updateURLParameter(window.location.href, 'locId', 'newLoc');
newURL = updateURLParameter(newURL, 'resId', 'newResId');
window.history.replaceState('', '', updateURLParameter(window.location.href, "param", "value"));
URL의 앵커도 관리하는 업데이트 버전입니다.
function updateURLParameter(url, param, paramVal)
{
var TheAnchor = null;
var newAdditionalURL = "";
var tempArray = url.split("?");
var baseURL = tempArray[0];
var additionalURL = tempArray[1];
var temp = "";
if (additionalURL)
{
var tmpAnchor = additionalURL.split("#");
var TheParams = tmpAnchor[0];
TheAnchor = tmpAnchor[1];
if(TheAnchor)
additionalURL = TheParams;
tempArray = additionalURL.split("&");
for (var i=0; i<tempArray.length; i++)
{
if(tempArray[i].split('=')[0] != param)
{
newAdditionalURL += temp + tempArray[i];
temp = "&";
}
}
}
else
{
var tmpAnchor = baseURL.split("#");
var TheParams = tmpAnchor[0];
TheAnchor = tmpAnchor[1];
if(TheParams)
baseURL = TheParams;
}
if(TheAnchor)
paramVal += "#" + TheAnchor;
var rows_txt = temp + "" + param + "=" + paramVal;
return baseURL + "?" + newAdditionalURL + rows_txt;
}
당신은 쿼리 플러그인을 원하는 것 같습니다.
예:
window.location.search = jQuery.query.set("rows", 10);
이것은 행의 현재 상태에 관계없이 작동합니다.
순수 js의 빠르고 작은 솔루션. 플러그인이 필요 없습니다.
function replaceQueryParam(param, newval, search) {
var regex = new RegExp("([?;&])" + param + "[^&;]*[;&]?");
var query = search.replace(regex, "$1").replace(/&$/, '');
return (query.length > 2 ? query + "&" : "?") + (newval ? param + "=" + newval : '');
}
이렇게 불러주세요.
window.location = '/mypage' + replaceQueryParam('rows', 55, window.location.search)
또는 같은 페이지를 유지하여 여러 개의 매개 변수를 바꾸려면 다음 절차를 수행합니다.
var str = window.location.search
str = replaceQueryParam('rows', 55, str)
str = replaceQueryParam('cols', 'no', str)
window.location = window.location.pathname + str
Luke: 하려면 pass를 합니다.false
""null
값은 다음과 같습니다.replaceQueryParam('rows', false, params)
.부터0
또한 거짓입니다. 지정'0'
.
많은 것을 배운 후 4년 후에 제 자신의 질문에 답하기 위해서.특히 모든 일에 jQuery를 사용해서는 안 된다고.쿼리 문자열을 해석/문자열화할 수 있는 간단한 모듈을 만들었습니다.이를 통해 쿼리 문자열을 쉽게 수정할 수 있습니다.
다음과 같이 query-string을 사용할 수 있습니다.
// parse the query string into an object
var q = queryString.parse(location.search);
// set the `row` property
q.rows = 10;
// convert the object to a query string
// and overwrite the existing query string
location.search = queryString.stringify(q);
이에 대한 현대적인 접근법은 네이티브 표준 기반의 URLearch Params를 사용하는 것입니다.폴리필이 가능한 IE를 제외한 모든 주요 브라우저에서 지원됩니다.
const paramsString = "site.fwx?position=1&archiveid=5000&columns=5&rows=20&sorting=ModifiedTimeAsc"
const searchParams = new URLSearchParams(paramsString);
searchParams.set('rows', 10);
console.log(searchParams.toString()); // return modified string.
Ben Alman은 여기에 쿼리 스트링/url 플러그인이 있어 쿼리 스트링을 쉽게 조작할 수 있습니다.
요청하신 대로 -
그의 테스트 페이지를 여기에 놓아라.
firebug에서 콘솔에 다음을 입력합니다.
jQuery.param.querystring(window.location.href, 'a=3&newValue=100');
다음과 같은 수정된 URL 문자열이 반환됩니다.
http://benalman.com/code/test/js-jquery-url-querystring.html?a=3&b=Y&c=Z&newValue=100#n=1&o=2&p=3
의 querystring 값이 X에서3으로 변경되어 새로운 값이 추가되었습니다.
그런 다음 새 URL 문자열을 사용할 수 있습니다. 예를 들어 document.location = newUrl을 사용하거나 앵커 링크를 변경하는 등
URL 파라미터를 변경하는 최신 방법은 다음과 같습니다.
function setGetParam(key,value) {
if (history.pushState) {
var params = new URLSearchParams(window.location.search);
params.set(key, value);
var newUrl = window.location.origin
+ window.location.pathname
+ '?' + params.toString();
window.history.pushState({path:newUrl},'',newUrl);
}
}
일반 JS를 통해서도 할 수 있습니다.
var url = document.URL
var newAdditionalURL = "";
var tempArray = url.split("?");
var baseURL = tempArray[0];
var aditionalURL = tempArray[1];
var temp = "";
if(aditionalURL)
{
var tempArray = aditionalURL.split("&");
for ( var i in tempArray ){
if(tempArray[i].indexOf("rows") == -1){
newAdditionalURL += temp+tempArray[i];
temp = "&";
}
}
}
var rows_txt = temp+"rows=10";
var finalURL = baseURL+"?"+newAdditionalURL+rows_txt;
URLearchParams를 사용하여check
,get
★★★★★★★★★★★★★★★★★」set
을 「」로 합니다.URL
다음으로 현재 URL을 취득하여 필요에 따라 새로운 파라미터를 설정하고 URL을 갱신하거나 페이지를 새로고침하는 예를 나타냅니다.
var rows = 5; // value that you want to set
var url = new URL(window.location);
(url.searchParams.has('rows') ? url.searchParams.set('rows', rows) : url.searchParams.append('rows', rows));
url.search = url.searchParams;
url = url.toString();
// if you want to append into URL without reloading the page
history.pushState({}, null, url);
// want to reload the window with a new param
window.location = url;
2020 솔루션: 합격 시 변수 설정 또는 제거null
""undefined
치를높높 높높높다다
var setSearchParam = function(key, value) {
if (!window.history.pushState) {
return;
}
if (!key) {
return;
}
var url = new URL(window.location.href);
var params = new window.URLSearchParams(window.location.search);
if (value === undefined || value === null) {
params.delete(key);
} else {
params.set(key, value);
}
url.search = params;
url = url.toString();
window.history.replaceState({url: url}, null, url);
}
String 실행 한 대체 방법은 html을 입니까?form
요.rows
요??
★★★★★★★★★★★★★★★★.html
셈이 되다
<form id='myForm' target='site.fwx'>
<input type='hidden' name='position' value='1'/>
<input type='hidden' name='archiveid' value='5000'/>
<input type='hidden' name='columns' value='5'/>
<input type='hidden' name='rows' value='20'/>
<input type='hidden' name='sorting' value='ModifiedTimeAsc'/>
</form>
다음 JavaScript를 사용하여 폼을 제출합니다.
var myForm = document.getElementById('myForm');
myForm.rows.value = yourNewValue;
myForm.submit();
모든 상황에 적합한 것은 아니지만 URL 문자열을 해석하는 것보다 좋을 수 있습니다.
URL 쿼리 파라미터는 URLearchParams 및 History 인터페이스를 사용하여 쉽게 변경할 수 있습니다.
// Construct URLSearchParams object instance from current URL querystring.
var queryParams = new URLSearchParams(window.location.search);
// Set new or modify existing parameter value.
//queryParams.set("myParam", "myValue");
queryParams.set("rows", "10");
// Replace current querystring with the new one.
history.replaceState(null, null, "?"+queryParams.toString());
replaceState()를 사용하여 현재 이력 엔트리를 변경하는 대신 pushState() 메서드를 사용하여 새 이력 엔트리를 만들 수도 있습니다.
history.pushState(null, null, "?"+queryParams.toString());
https://zgadzaj.com/development/javascript/how-to-change-url-query-parameter-with-javascript-only
이 작업을 수행하려면 내 라이브러리를 사용할 수 있습니다. https://github.com/Mikhus/jsurl
var url = new Url('site.fwx?position=1&archiveid=5000&columns=5&rows=20&sorting=ModifiedTimeAsc');
url.query.rows = 10;
alert( url);
다음 사항을 고려하십시오.
const myUrl = new URL("http://www.example.com?columns=5&rows=20");
myUrl.searchParams.set('rows', 10);
console.log(myUrl.href); // http://www.example.com?columns=5&rows=10
myUrl.searchParams.set('foo', 'bar'); // add new param
console.log(myUrl.href); // http://www.example.com?columns=5&rows=10&foo=bar
그것은 당신이 요구한 것과 정확히 같은 일을 할 것입니다.URL " " " " " " " 입니다. 쪽이든)을 .http
""https
)
저는 어떤 선택에도 사용할 수 있는 작은 도우미 기능을 썼습니다.필요한 것은 임의의 선택 요소에 "redirect On Change" 클래스를 추가하는 것뿐입니다.이것에 의해, 새로운/변경된 쿼리 스트링 파라미터(선택의 id 및 값과 같음)로 페이지가 새로고침됩니다.예를 들면, 다음과 같습니다.
<select id="myValue" class="redirectOnChange">
<option value="222">test222</option>
<option value="333">test333</option>
</select>
위의 예에서는 "?myValue=222" 또는 "?myValue=333"을 추가하고(다른 매개 변수가 있는 경우 "&" 사용) 페이지를 다시 로드합니다.
j쿼리:
$(document).ready(function () {
//Redirect on Change
$(".redirectOnChange").change(function () {
var href = window.location.href.substring(0, window.location.href.indexOf('?'));
var qs = window.location.href.substring(window.location.href.indexOf('?') + 1, window.location.href.length);
var newParam = $(this).attr("id") + '=' + $(this).val();
if (qs.indexOf($(this).attr("id") + '=') == -1) {
if (qs == '') {
qs = '?'
}
else {
qs = qs + '&'
}
qs = qs + newParam;
}
else {
var start = qs.indexOf($(this).attr("id") + "=");
var end = qs.indexOf("&", start);
if (end == -1) {
end = qs.length;
}
var curParam = qs.substring(start, end);
qs = qs.replace(curParam, newParam);
}
window.location.replace(href + '?' + qs);
});
});
javascript URL 사용:
var url = new URL(window.location);
(url.searchParams.has('rows') ? url.searchParams.set('rows', rows) : url.searchParams.append('rows', rows));
window.location = url;
var url = new URL(window.location.href);
var search_params = url.searchParams;
search_params.set("param", value);
url.search = search_params.toString();
var new_url = url.pathname + url.search;
window.history.replaceState({}, '', new_url);
여기에서는, Adil Malik씨의 답변을 받아, 이것에 의해서 특정된 3개의 문제를 수정했습니다.
/**
* Adds or updates a URL parameter.
*
* @param {string} url the URL to modify
* @param {string} param the name of the parameter
* @param {string} paramVal the new value for the parameter
* @return {string} the updated URL
*/
self.setParameter = function (url, param, paramVal){
// http://stackoverflow.com/a/10997390/2391566
var parts = url.split('?');
var baseUrl = parts[0];
var oldQueryString = parts[1];
var newParameters = [];
if (oldQueryString) {
var oldParameters = oldQueryString.split('&');
for (var i = 0; i < oldParameters.length; i++) {
if(oldParameters[i].split('=')[0] != param) {
newParameters.push(oldParameters[i]);
}
}
}
if (paramVal !== '' && paramVal !== null && typeof paramVal !== 'undefined') {
newParameters.push(param + '=' + encodeURI(paramVal));
}
if (newParameters.length > 0) {
return baseUrl + '?' + newParameters.join('&');
} else {
return baseUrl;
}
}
URLearchParams 문서에는 이력 스택에 영향을 주지 않고 매우 깔끔한 방법이 있습니다.
// URL: https://example.com?version=1.0
const params = new URLSearchParams(location.search);
params.set('version', 2.0);
window.history.replaceState({}, '', `${location.pathname}?${params}`);
// URL: https://example.com?version=2.0
마찬가지로 파라미터를 삭제한다.
params.delete('version')
window.history.replaceState({}, '', `${location.pathname}?${params}`);
// URL: https://example.com?
이게 내가 하는 일이야.editParams() 함수를 사용하면 임의의 파라미터를 추가, 삭제 또는 변경할 수 있습니다.그 후 삽입 replaceState() 함수를 사용하여 URL을 갱신할 수 있습니다.
window.history.replaceState('object or string', 'Title', 'page.html' + editParams('sorting', ModifiedTimeAsc));
// 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;
}
솔루션:
const setParams = (data) => {
if (typeof data !== 'undefined' && typeof data !== 'object') {
return
}
let url = new URL(window.location.href)
const params = new URLSearchParams(url.search)
for (const key of Object.keys(data)) {
if (data[key] == 0) {
params.delete(key)
} else {
params.set(key, data[key])
}
}
url.search = params
url = url.toString()
window.history.replaceState({ url: url }, null, url)
}
그런 다음 "setParams"를 호출하고 설정할 데이터가 포함된 개체를 전달합니다.
예:
$('select').on('change', e => {
const $this = $(e.currentTarget)
setParams({ $this.attr('name'): $this.val() })
})
제 경우 html select 입력이 변경되었을 때 갱신하고 값이 "0"이면 파라미터를 삭제해야 합니다.개체 키가 "null"인 경우에도 함수를 편집하고 URL에서 매개 변수를 제거할 수 있습니다.
이게 도움이 되길 바래
주소 표시줄의 URL을 변경하는 경우:
const search = new URLSearchParams(location.search);
search.set('rows', 10);
location.search = search.toString();
주의, 변경location.search
는 페이지를 새로고침합니다.
여기 라이브러리를 사용한 간단한 해결책이 있습니다.
const qs = require('query-string')
function addQuery(key, value) {
const q = qs.parse(location.search)
const url = qs.stringifyUrl(
{
url: location.pathname,
query: {
...q,
[key]: value,
},
},
{ skipEmptyString: true }
);
window.location.href = url
// if you are using Turbolinks
// add this: Turbolinks.visit(url)
}
// Usage
addQuery('page', 2)
사용하시는 경우react
없이.react-router
export function useAddQuery() {
const location = window.location;
const addQuery = useCallback(
(key, value) => {
const q = qs.parse(location.search);
const url = qs.stringifyUrl(
{
url: location.pathname,
query: {
...q,
[key]: value,
},
},
{ skipEmptyString: true }
);
window.location.href = url
},
[location]
);
return { addQuery };
}
// Usage
const { addQuery } = useAddQuery()
addQuery('page', 2)
사용하시는 경우react
와 함께react-router
export function useAddQuery() {
const location = useLocation();
const history = useHistory();
const addQuery = useCallback(
(key, value) => {
let pathname = location.pathname;
let searchParams = new URLSearchParams(location.search);
searchParams.set(key, value);
history.push({
pathname: pathname,
search: searchParams.toString()
});
},
[location, history]
);
return { addQuery };
}
// Usage
const { addQuery } = useAddQuery()
addQuery('page', 2)
PS:qs
로부터의 Import입니다.query-string
모듈.
Sujoy의 답변에 대한 또 다른 변형입니다.변수 이름을 변경하고 네임스페이스 래퍼를 추가했습니다.
window.MyNamespace = window.MyNamespace || {};
window.MyNamespace.Uri = window.MyNamespace.Uri || {};
(function (ns) {
ns.SetQueryStringParameter = function(url, parameterName, parameterValue) {
var otherQueryStringParameters = "";
var urlParts = url.split("?");
var baseUrl = urlParts[0];
var queryString = urlParts[1];
var itemSeparator = "";
if (queryString) {
var queryStringParts = queryString.split("&");
for (var i = 0; i < queryStringParts.length; i++){
if(queryStringParts[i].split('=')[0] != parameterName){
otherQueryStringParameters += itemSeparator + queryStringParts[i];
itemSeparator = "&";
}
}
}
var newQueryStringParameter = itemSeparator + parameterName + "=" + parameterValue;
return baseUrl + "?" + otherQueryStringParameters + newQueryStringParameter;
};
})(window.MyNamespace.Uri);
사용 현황:
var changedUrl = MyNamespace.Uri.SetQueryStringParameter(originalUrl, "CarType", "Ford");
저도 JavaScript에서 URL 쿼리 파라미터를 취득하고 설정하기 위한 라이브러리를 작성했습니다.
다음은 그 사용 예를 제시하겠습니다.
var url = Qurl.create()
, query
, foo
;
개체, 키 또는 추가/변경/제거로 쿼리 매개 변수를 가져옵니다.
// returns { foo: 'bar', baz: 'qux' } for ?foo=bar&baz=qux
query = url.query();
// get the current value of foo
foo = url.query('foo');
// set ?foo=bar&baz=qux
url.query('foo', 'bar');
url.query('baz', 'qux');
// unset foo, leaving ?baz=qux
url.query('foo', false); // unsets foo
같은 것을 찾고 있었는데, https://github.com/medialize/URI.js이 꽤 좋은 것 같습니다.
-- 갱신
더 좋은 패키지를 찾았습니다.https://www.npmjs.org/package/qs 에서는 get param 내의 어레이도 취급합니다.
라이브러리가 없습니다.URL() WebAPI(https://developer.mozilla.org/en-US/docs/Web/API/URL)를 사용합니다.
function setURLParameter(url, parameter, value) {
let url = new URL(url);
if (url.searchParams.get(parameter) === value) {
return url;
}
url.searchParams.set(parameter, value);
return url.href;
}
IE에서는 동작하지 않습니다.https://developer.mozilla.org/en-US/docs/Web/API/URL#Browser_compatibility
let url= new URL("https://example.com/site.fwx?position=1&archiveid=5000&columns=5&rows=20&sorting=ModifiedTimeAsc")
url.searchParams.set('rows', 10)
console.log(url.toString())
오래된 질문인 거 알아요.쿼리 파라미터를 추가 또는 갱신할 수 있도록 위의 기능을 강화하였습니다.여전히 순수 JS 솔루션입니다.
function addOrUpdateQueryParam(param, newval, search) {
var questionIndex = search.indexOf('?');
if (questionIndex < 0) {
search = search + '?';
search = search + param + '=' + newval;
return search;
}
var regex = new RegExp("([?;&])" + param + "[^&;]*[;&]?");
var query = search.replace(regex, "$1").replace(/&$/, '');
var indexOfEquals = query.indexOf('=');
return (indexOfEquals >= 0 ? query + '&' : query + '') + (newval ? param + '=' + newval : '');
}
my function support param 제거
function updateURLParameter(url, param, paramVal, remove = false) {
var newAdditionalURL = '';
var tempArray = url.split('?');
var baseURL = tempArray[0];
var additionalURL = tempArray[1];
var rows_txt = '';
if (additionalURL)
newAdditionalURL = decodeURI(additionalURL) + '&';
if (remove)
newAdditionalURL = newAdditionalURL.replace(param + '=' + paramVal, '');
else
rows_txt = param + '=' + paramVal;
window.history.replaceState('', '', (baseURL + "?" + newAdditionalURL + rows_txt).replace('?&', '?').replace('&&', '&').replace(/\&$/, ''));
}
언급URL : https://stackoverflow.com/questions/1090948/change-url-parameters-and-specify-defaults-using-javascript
'programing' 카테고리의 다른 글
생성된 소스 폴더와 함께 Intelij를 사용할 수 없습니다. (0) | 2022.10.27 |
---|---|
명령줄에서 스크립트 기능 실행(노드 JS) (0) | 2022.10.27 |
Laravel first 아니면 새 제품인지 확인하는 방법? (0) | 2022.10.27 |
phpmyadmin에서 외부 키를 만드는 방법 (0) | 2022.10.27 |
CamelCase를 snake_case로 변환하는 우아한 Python 함수? (0) | 2022.10.27 |