使用 JavaScript 更改 URL 参数并指定默认值
我有这个 URL:
site.fwx?position=1&archiveid=5000&columns=5&rows=20&sorting=ModifiedTimeAsc
我需要的是能够将“rows”url 参数值更改为我指定的值,比如说 10。如果“rows”不存在,我需要将其添加到url 并添加我已经指定的值 (10)。
I have this URL:
site.fwx?position=1&archiveid=5000&columns=5&rows=20&sorting=ModifiedTimeAsc
what I need is to be able to change the 'rows' url param value to something i specify, lets say 10. And if the 'rows' doesn't exist, I need to add it to the end of the url and add the value i've already specified (10).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(30)
我扩展了 Sujoy 的代码来组成一个函数。
函数调用:
更新版本还处理 URL 上的锚点。
I've extended Sujoy's code to make up a function.
Function Calls:
Updated version that also take care of the anchors on the URL.
我认为您需要查询插件。
例如:
无论行的当前状态如何,这都会起作用。
I think you want the query plugin.
E.g.:
This will work regardless of the current state of rows.
四年后,在学到了很多东西之后,回答我自己的问题。 特别是你不应该把 jQuery 用于所有事情。 我创建了一个简单的模块,可以解析/字符串化查询字符串。 这使得修改查询字符串变得容易。
您可以使用 query-string 如下:
To answer my own question 4 years later, after having learned a lot. Especially that you shouldn't use jQuery for everything. I've created a simple module that can parse/stringify a query string. This makes it easy to modify the query string.
You can use query-string as follows:
纯 js 中的快速小解决方案,无需插件:
像这样调用它:
或者,如果您想留在同一页面上并替换多个参数:
编辑,谢谢卢克:要完全删除参数,请传递
false 或
null
值:replaceQueryParam('rows', false, params)
。 由于0
也是假的,请指定 <代码>'0'。Quick little solution in pure js, no plugins needed:
Call it like this:
Or, if you want to stay on the same page and replace multiple params:
edit, thanks Luke: To remove the parameter entirely, pass
false
ornull
for the value:replaceQueryParam('rows', false, params)
. Since0
is also falsy, specify'0'
.一种现代方法是使用基于本机标准的 URLSearchParams。 所有主要浏览器都支持它,但 IE 除外,IE 可用。
A modern approach to this is to use native standard based URLSearchParams. It's supported by all major browsers, except for IE where polyfills are available.
Ben Alman 有一个很好的 jquery querystring/url 插件这里 允许您轻松操作查询字符串。
根据要求 -
转到他的测试页面 此处
在 firebug 中,在控制台中输入以下内容
jQuery.param.querystring(window.location.href, 'a=3&newValue=100 ');
它将返回以下修改后的 url 字符串
请注意,a 的查询字符串值已从 X 更改为 3,并且添加了新值。
然后您可以根据需要使用新的 url 字符串,例如
使用 document.location = newUrl 或更改锚链接等
Ben Alman has a good jquery querystring/url plugin here that allows you to manipulate the querystring easily.
As requested -
Goto his test page here
In firebug enter the following into the console
jQuery.param.querystring(window.location.href, 'a=3&newValue=100');
It will return you the following amended url string
Notice the a querystring value for a has changed from X to 3 and it has added the new value.
You can then use the new url string however you wish e.g
using document.location = newUrl or change an anchor link etc
这是更改 URL 参数的现代方法:
This is the modern way to change URL parameters:
你也可以通过普通的JS来完成
you can do it via normal JS also
使用 URLSearchParams 来
检查
,get
和set
将参数值放入URL
下面是获取当前 URL 设置新参数并更新 URL 或重新加载页面的示例根据您的需要
Use URLSearchParams to
check
,get
andset
the parameters value intoURL
Here is the example to get the current URL set new parameters and update the URL or reload the page as per your needs
2020 解决方案:如果将
null
或undefined
传递给值,则设置变量或删除 iti。2020 Solution: sets the variable or removes iti if you pass
null
orundefined
to the value.字符串操作的可行替代方案是设置一个 html
form
并仅修改rows
元素的值?因此,使用
html
类似于使用以下 JavaScript 提交表单
可能并不适合所有情况,但可能比解析 URL 字符串更好。
Would a viable alternative to String manipulation be to set up an html
form
and just modify the value of therows
element?So, with
html
that is something likeWith the following JavaScript to submit the form
Probably not suitable for all situations, but might be nicer than parsing the URL string.
使用 URLSearchParams 和 History 接口可以轻松修改 URL 查询参数:
或者,我们可以使用 pushState() 方法创建一个新条目,而不是使用 ReplaceState() 修改当前历史条目:
https://zgadzaj.com/development/javascript/how-to-change-url-query-仅带 javascript 参数
URL query parameters can be easily modified using URLSearchParams and History interfaces:
Alternatively instead of modifying current history entry using replaceState() we can use pushState() method to create a new one:
https://zgadzaj.com/development/javascript/how-to-change-url-query-parameter-with-javascript-only
您可以使用我的库来完成这项工作: https://github.com/Mikhus/jsurl
You can use this my library to do the job: https://github.com/Mikhus/jsurl
考虑一下这个:
它会做与您需要的完全相同的事情。 请注意 URL 必须具有正确的格式。 在您的示例中,您必须指定协议(
http
或https
)Consider this one:
It will do exactly the same thing you required. Please note URL must have correct format. In your example you have to specify protocol (either
http
orhttps
)我编写了一个适用于任何选择的小辅助函数。 您需要做的就是将“redirectOnChange”类添加到任何 select 元素,这将导致页面使用新的/更改的查询字符串参数重新加载,该参数等于 select 的 id 和值,例如:
上面的示例将添加“?myValue=222”或“?myValue=333”(如果存在其他参数,则使用“&”),然后重新加载页面。
jQuery:
I wrote a little helper function that works with any select. All you need to do is add the class "redirectOnChange" to any select element, and this will cause the page to reload with a new/changed querystring parameter, equal to the id and value of the select, e.g:
The above example would add "?myValue=222" or "?myValue=333" (or using "&" if other params exist), and reload the page.
jQuery:
使用 JavaScript 网址:
Using javascript URL:
在 URLSearchParams 文档中,有一种非常简洁的方法这不会影响历史堆栈。
类似地,删除一个参数
In the URLSearchParams documentation, there's a very clean way of doing this, without affecting the history stack.
Similarily, to remove a parameter
在这里,我采纳了 Adil Malik 的答案并修复了我发现的 3 个问题。
Here I have taken Adil Malik's answer and fixed the 3 issues I identified with it.
这就是我所做的。 使用我的 editParams() 函数,您可以添加、删除或更改任何参数,然后使用内置的 ReplaceState() 函数来更新 URL:
Here is what I do. Using my editParams() function, you can add, remove, or change any parameter, then use the built in replaceState() function to update the URL:
我的解决方案:
然后只需调用“setParams”并传递一个包含您要设置的数据的对象。
示例:
在我的例子中,我必须在 html 选择输入发生更改时更新它,如果值为“0”,则删除该参数。 如果对象键也为“null”,您可以编辑函数并从 url 中删除参数。
希望这对你们有帮助
My solution:
Then just call "setParams" and pass an object with data you want to set.
Example:
In my case I had to update a html select input when it changes and if the value is "0", remove the parameter. You can edit the function and remove the parameter from the url if the object key is "null" as well.
Hope this helps yall
如果您想更改地址栏中的 url:
请注意,更改
location.search
会重新加载页面。If you want to change the url in address bar:
Note, changing
location.search
reloads the page.这是使用
query-string
库的简单解决方案。如果您在不使用
react-router
的情况下使用react
如果您在使用
react
和react-router
PS :
qs
是从query-string
模块导入的。Here is a simple solution using the
query-string
library.If you are using
react
withoutreact-router
If you are using
react
withreact-router
PS:
qs
is the import fromquery-string
module.Sujoy 答案的另一种变化。 只是更改了变量名称& 添加了命名空间包装器:
现在的用法是:
Another variation on Sujoy's answer. Just changed the variable names & added a namespace wrapper:
Useage is now:
我也编写了一个用于在 JavaScript 中获取和设置 URL 查询参数的库。
这是其用法的示例。
通过键或添加/更改/删除来获取作为对象的查询参数。
I too have written a library for getting and setting URL query parameters in JavaScript.
Here is an example of its usage.
Get query params as an object, by key, or add/change/remove.
我正在寻找同样的东西并发现: https://github.com/medialize/URI.js 非常好:)
-- 更新
我发现了一个更好的包:https://www.npmjs。 org/package/qs 它还处理 get params 中的数组。
I was looking for the same thing and found: https://github.com/medialize/URI.js which is quite nice :)
-- Update
I found a better package: https://www.npmjs.org/package/qs it also deals with arrays in get params.
无库,使用 URL() WebAPI (https://developer.mozilla .org/en-US/docs/Web/API/URL)
这在 IE 上不起作用:https://developer.mozilla.org/en-US/docs/Web/API/URL#Browser_compatibility
No library, using URL() WebAPI (https://developer.mozilla.org/en-US/docs/Web/API/URL)
This doesn't work on IE: https://developer.mozilla.org/en-US/docs/Web/API/URL#Browser_compatibility
我知道这是一个老问题。 我增强了上面的功能来添加或更新查询参数。 仍然只是纯 JS 解决方案。
I know this is an old question. I have enhanced the function above to add or update query params. Still a pure JS solution only.
我的函数支持删除参数
my function support removing param