添加一个if语句

时间:2019-11-27 11:29:39

标签: javascript if-statement

我的代码如下:

$('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);
  }
});

但是它不能正常工作。

3 个答案:

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