jQuery尽管if语句,每个函数都会遍历所有内容

时间:2015-07-01 19:42:59

标签: javascript jquery

在点击页面上的特定链接后,代码会附加页面URL。当我运行代码时,它按预期执行,仅将URL附加到与代码匹配的链接。但是,当我打印到控制台时,我注意到它似乎为页面上的每个链接执行此操作,尽管if语句应该限制它。当我拿出if语句时,代码的功能相同。但是,即使它有效,我也希望提高效率,并且只在匹配参数的链接上运行。

 // Function to change the link by adding the current page
 function setSlateLink() {
     // get the URL of the current page
     var currentPage = document.location.href;
     // get the URL of the slate
     var slateLink = jQuery('a[href$="code=magic"]').attr("href");
     // rewrite the slate, adding the query string with a key for Slate and value of the current page
     console.log("Processing link change");
     return slateLink += "&sys:interaction:summary=" + currentPage;

 }

 jQuery(document).ready(function() {

     jQuery("a").each(function(i, item) {
         // if there is an a tag, check that it ends like this
         if (jQuery(i == 'a[href$="code=magic"]')) {
             console.log("Found link: " + jQuery("a").attr("href"));
             // change the link to set the referrer (current page) in the URL
             jQuery('a[href$="magic"]').attr("href", setSlateLink());
             console.log("Changed link");
         }

     });
 });

知道会导致什么原因吗?

2 个答案:

答案 0 :(得分:4)

你打电话给if (jQuery(i == 'a[href$="code=magic"]'))
这将返回一个真实的jquery对象,导致if语句始终执行。

如果您试图查看该元素是否与选择器匹配,则可以使用jquerys #is方法:
if ($(item).is('a[href$="code=magic"]'))

答案 1 :(得分:2)

使用is()确定某个元素是否与选择器匹配。 http://api.jquery.com/is/

示例:

if ($(item).is('a[href$="code=magic"]')) {
  // item matches
}

但是你可以通过选择那些特定的标签来简化它:

$('a[href$="code=magic"]').each(function(i, item) {
  // just code=magic links...
});

更进一步......

$('a[href$="code=magic"]').each(function(i, item) {
  var href = $(item).attr('href');

  $(item).attr('href', href + '&sys:interaction:summary=' + document.location.href);
});