如何使用jquery在标记的href属性中切换url参数的值?

时间:2018-03-09 21:39:57

标签: jquery

我正在尝试使用jquery切换A标记中href属性中最后一个参数的值。

在以下之间切换:

target.php?id=123&search=selected&format=html&pricing=false

和:

target.php?id=123&search=selected&format=html&pricing=true

我有个不错的开始:

$('#option-include-prices').on('click', function(){

    var buttons = document.getElementsByClassName('download-button');

    for (var i=0; i < buttons.length; i++) {

        var button = buttons[i];

        var href = $(button).attr('href');

        var bool = (href.indexOf('false') > 0) ? 'true' : 'false';

        $(button).attr('href', href.replace('false', bool)); // obviously a problem

    }

});

所以我可以找到值是真还是假&amp;相应地设置一个变量 - 但是如果已经将值设置为true(即无法将其切换回false),则replace()方法显然不起作用。

应该用什么方法来切换变量?

1 个答案:

答案 0 :(得分:1)

我编写了一个名为updateParam的函数,因此您可以最佳地使用它,而不仅仅是在链接中关闭和打开布尔值。我还为函数编写了一个包装器,以便您可以看到如何使用它。

&#13;
&#13;
function updateParam (url, param, value) {
  return url.replace(/(.*?\?|)(.*?)=(.*?)(&|$)/g, function (ignore,starter,key,v,ending) {
    if (key === param) {
      v = value;
    }
    return starter + key + "=" + v + ending;
  });
}

$liveUpdate = $("#liveUpdate");

$("#boolTest").on("click", function () {
  var isChecked = $(this).is(":checked");
  $liveUpdate.attr("href",
    updateParam($liveUpdate.attr("href"),"pricing",isChecked)
  );
  
  console.log($liveUpdate.attr("href"));
}).trigger("click");
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Toggle off and on this checkbox to test the code: <input type="checkbox" id="boolTest" />
<hr />
<a id="liveUpdate" href="target.php?id=123&search=selected&format=html&pricing=false">testing link</a>
&#13;
&#13;
&#13;