我正在尝试使用" attr"获取我在新窗口中打开的链接。 jQuery中的功能没有运气。
以下是客户网站:http://www.sunsetstudiosent.com在"新闻"部分。
此外,还有一种方法可以区分并将其应用于非现场链接的链接吗?
comment
答案 0 :(得分:0)
一行vanilla Javascript将为您完成;不需要jQuery:
document.querySelectorAll('#block-8c94657a90c2362b8126 .summary-title-link')
.forEach(function(x) {
x.setAttribute('target', '_blank');
});
类似的代码,在应用target="_blank"
之前还检查链接是否在同一个域上:
document.querySelectorAll('#block-8c94657a90c2362b8126 .summary-title-link')
.forEach(function(x) {
var url = new URL(x.href);
if (url.host !== window.location.host) {
x.setAttribute('target', '_blank');
}
});
如果您不确定是否会添加这些元素上的链接,您可能希望将函数体包装在try-catch块中。
答案 1 :(得分:0)
因为$(this)
持有.summary-item
而不是锚标记......
因此$(this).attr('target', '_blank')
会将target
属性添加到.summary-item
而不是<a>
代码...
所以你需要在这里更改逻辑...尝试在这里使用find()
jQuery
$(this).find("a").attr('target', '_blank');
所以你的完整代码将是
var sBlock = $('[data-block-json*="9dac9e62587eab820575"]'),
items = sBlock.find('.summary-item');
$.each(items, function() {
var $this = $(this),
itemLink = $this.find('.summary-title a').attr('href');
$this.find('.summary-read-more-link').attr('href', itemLink);
$this.find('.summary-metadata-item a').attr('href', itemLink);
$(this).find("a").attr('target', '_blank');
});