我在网上商店使用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, " "));
}
答案 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;
}
}