我的代码如下:
$('a').each(function(){
$(this).attr('href', $(this).attr('href') + '?utm_source=' + utm_source + '&utm_campaign' + utm_campaign + '&utm_medium' + utm_medium);
});
该代码将一些UTM参数添加到站点上的所有链接。但是现在我想排除一些特定的链接:
https://www.mysite.or/cat1
https://www.mysite.or/cat2
所以我想到了:
$('a').each(function() {
if ("href:contains('https://www.mysite.or/cat1')") {
$(this).attr('href');
} else if ("href:contains('https://www.mysite.or/cat1')") {
$(this).attr('href');
} else {
$(this).attr('href', $(this).attr('href') + '?utm_source=' + utm_source + '&utm_campaign' + utm_campaign + '&utm_medium' + utm_medium);
}
});
但是它不能正常工作。
答案 0 :(得分:1)
通过减小选择器的范围排除所有不需要的网址
$('a:not([href$="cat1"]):not([href$="cat2"])').each(function() {
$(this).attr('href', ...);
});
$=
表示以
$('a:not([href$="cat1"]):not([href$="cat2"])').each(function() {
$(this).html('changed')
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="http://somelink/cat0">untouched</a>
<a href="http://somelink/cat1">untouched</a>
<a href="http://somelink/cat2">untouched</a>
<a href="http://somelink/cat3">untouched</a>
<a href="http://somelink/cat4">untouched</a>
答案 1 :(得分:1)
您还可以执行以下操作:
$('a:not([href^="https://www.mysite.or/cat"])')
仅将选择不包含以<a>
开头的href的https://www.mysite.or/cat
个标记
$('a:not([href^="https://www.mysite.or/cat"])').each(function() {
$(this).addClass('found');
});
.found {
background-color: orange;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="#">some</a>
<a href="https://www.mysite.or/cat2">xxx1</a>
<a href="https://www.mysite.or/cat1">xxx1</a>
答案 2 :(得分:0)
如果您创建排除域的列表会更好,这样将来添加更多域将变得更加容易。例如这样的
var exclude = [
"https://www.mysite.or/cat1",
"https://www.anysite.com"
]
$('a').each(function() {
var href = $(this).attr('href');
if (exclude.indexOf(href) === -1) {
$(this).attr('href', $(this).attr('href') + '?utm_source=' + utm_source + '&utm_campaign' + utm_campaign + '&utm_medium' + utm_medium);
}
});
正如@caramba在评论中指出的那样,如果您关心性能(即您有成千上万的{{1}}进行迭代,或者有数十个被排除的域),上述解决方案并不是最快的。另一个可能的解决方案(同时保持代码易于维护)是构建选择器并将其传递给jQuery:
a