使用javascript优雅地修改现有链接的参数

时间:2013-12-05 18:46:45

标签: javascript jquery ruby-on-rails regex params

我想使用javascript查找包含大量参数的链接的一部分:

<a class="" data-method="post" href="/daily_drills?commonality%5B%5D=category&amp;commonality%5B%5D=2&amp;daily_drill%5Bgroup_id%5D=2&amp;drill_ids%5B%5D=7&amp;drill_ids%5B%5D=4&amp;drill_ids%5B%5D=3&amp;group=2" id="done-button" rel="nofollow">Done</a>

在参数drill_ids

中添加/删除数字

在上面的示例中,drill_ids参数包含["7", "4", "3"]

drill_ids%5B%5D=7&amp;drill_ids%5B%5D=4&amp;drill_ids%5B%5D=3

我有一个方法,当用户点击页面上的数字时触发,如果他们点击“7”我想从drill_ids参数中删除“7”。如果他们点击了参数中不存在的数字,我想将它附加到drill_ids参数。

  • 由于我可以将此链接渲染为部分,因此我考虑使用附加的drill_ids参数重新渲染整个事物,但是在较弱的连接上不会有瞬时响应时间。

    < / LI>
  • 我可以 - 只是进入正则表达式并添加/删除drill_ids%5B%5D = 7&amp; (对于数字7),但似乎有一种更清洁的方式来做到这一点。

我应该如何处理这个问题?

1 个答案:

答案 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)