我想使用javascript查找包含大量参数的链接的一部分:
<a class="" data-method="post" href="/daily_drills?commonality%5B%5D=category&commonality%5B%5D=2&daily_drill%5Bgroup_id%5D=2&drill_ids%5B%5D=7&drill_ids%5B%5D=4&drill_ids%5B%5D=3&group=2" id="done-button" rel="nofollow">Done</a>
在参数drill_ids
中添加/删除数字在上面的示例中,drill_ids
参数包含["7", "4", "3"]
:
drill_ids%5B%5D=7&drill_ids%5B%5D=4&drill_ids%5B%5D=3
我有一个方法,当用户点击页面上的数字时触发,如果他们点击“7”我想从drill_ids参数中删除“7”。如果他们点击了参数中不存在的数字,我想将它附加到drill_ids参数。
由于我可以将此链接渲染为部分,因此我考虑使用附加的drill_ids参数重新渲染整个事物,但是在较弱的连接上不会有瞬时响应时间。
< / LI>我可以 - 只是进入正则表达式并添加/删除drill_ids%5B%5D = 7&amp; (对于数字7),但似乎有一种更清洁的方式来做到这一点。
我应该如何处理这个问题?
答案 0 :(得分:0)
我最终做了一个简单的javascript匹配,因为我无法想出一个聪明的干净解决方案:
// I build up a string that I want to replace the old string with
// create a list of the ids that I wanted to append
listOfIds = ""
arrayOfIds.forEach (id) ->
listOfIds = listOfIds+id
// grab the old link in it's entirety
oldLink = $("#done-button").attr("href")
console.log(oldLink)
// grab the string from the old link I don't want
match = oldLink.match(/(?:group_id%5D=2)(.*)(?=&group=)/)[1]
// replace the old string with the new string
newLink = oldLink.replace(match, listOfIds)
// changed the href attribute on the link
$("#done-button").attr('href', newLink)