在点击页面上的特定链接后,代码会附加页面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");
}
});
});
知道会导致什么原因吗?
答案 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);
});