URL的函数不返回正确的值

时间:2016-06-10 07:38:24

标签: jquery

我在网上商店使用2个功能自动在我的锚标签中设置href

这是他们在剧本之前的样子:

<a class="Motifyer" data-query="Brand" data-value="@brand.Item1" href="#">
<a class="Motifyer" data-query="Brand" data-value="@brand.Item1" href="#">

在查询之后:

<a class="Motifyer" data-query="Brand" data-value="@brand.Item1" href="http://localhost:44300/shop?Brand=Apple">
<a class="Motifyer" data-query="Brand" data-value="@brand.Item1" href="http://localhost:44300/shop?Brand=Samsung">

聪明的想法是(据我所知),如果网址包含Brand=Samsung,结果将是:

<a class="Motifyer" data-query="Brand" data-value="@brand.Item1" href="http://localhost:44300/shop?Brand=Apple">
<a class="Motifyer" data-query="Brand" data-value="@brand.Item1" href="http://localhost:44300/shop">
<!-- Notice the removed query on the second one -->

问题是,如果我的查询中有多个参数并且我删除了第一个?xxx=xxx,它有时不会将第一个&amp; 更改为

有人可以告诉我问题可能在哪里吗?

以下代码包含我的JS函数:

$('.Motifyer').each(function () {
    var url, query, value, queryCount, matches;

    url = window.location.href.replace("#", "");
    query = $(this).data('query');
    value = $(this).data('value');
    matches = url.match(/[a-z\d]+=[a-z\d]+/gi);
    queryCount = matches ? matches.length : 0;

    if (url.indexOf(query) > -1) {
        if (getParameterByName(query) == value) {
            url = url.replace("?" + query + "=" + value, "");
            url = url.replace("&" + query + "=" + value, "");
        } else {
            url = url.replace(query + "=" + getParameterByName(query), query + "=" + value)
        }

    } else {
        if (queryCount == 0) {
            url = url + "?" + query + "=" + value;
        } else {
            url = url + "&" + query + "=" + value;
        }
    }
    $(this).attr("href", url);
});

function getParameterByName(name, url) {
    if (!url) url = window.location.href;
    name = name.replace(/[\[\]]/g, "\\$&");
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, " "));
}

1 个答案:

答案 0 :(得分:0)

代码对我来说很好,这可能会像&#34;快速&#34;你的解决方案。

插入以下一行:url = url.replace("?" + query + "=" + value + "&", "?");

if (url.indexOf(query) > -1) {
    if (getParameterByName(query) == value) {
        ----> Insert Right here <----
        url = url.replace("?" + query + "=" + value, "");
        url = url.replace("&" + query + "=" + value, "");
    } else {
        url = url.replace(query + "=" + getParameterByName(query), query + "=" + value)
    }

} else {
    if (queryCount == 0) {
        url = url + "?" + query + "=" + value;
    } else {
        url = url + "&" + query + "=" + value;
    }
}