Javascript 具有特定类作为祖先的筛选器元素

Javascript 具有特定类作为祖先的筛选器元素,javascript,jquery,Javascript,Jquery,我有一个jQuery代码段,它可以在新窗口中打开所有出站链接 jQuery(document.links) .filter(function() { return this.hostname != window.location.hostname; }) .attr('target', '_blank'); 那很好用 我试图使它不适用于类为.render(可能是也可能不是直接父级)的元素内部出现的任何链接 我试过: jQuery(document.lin

我有一个jQuery代码段,它可以在新窗口中打开所有出站链接

jQuery(document.links)
    .filter(function() {
        return this.hostname != window.location.hostname;
    })
    .attr('target', '_blank');
那很好用

我试图使它不适用于类为
.render
(可能是也可能不是直接父级)的元素内部出现的任何链接

我试过:

jQuery(document.links)
    .filter(function() {
        return this.hostname != window.location.hostname;
    })
    .not( this.parents('.render'))
    .attr('target', '_blank');

这不仅不起作用,控制台还说
父项
不是一个函数。

由于您已经在使用一个过滤器,因此无需使用
Not()
添加另一个过滤器。只需在
filter()中添加额外的条件

var renderLinks = jQuery(".render a");
jQuery(a).filter(...).not(renderLinks).attr('target', function(){ return '_blank';});

由于您已经在使用一个筛选器,因此无需使用
not()
添加另一个筛选器。只需在
filter()中添加额外的条件


是否需要$(this).parents()?这将不起作用,因为此时“this”不是指链接。此外,海报的原始意图虽然有效,但可能非常缓慢,因为每个链接测试都将在.renderDo下重新创建一组所有链接,您需要$(this).parents()?这将不起作用,因为此时“this”不是指链接。此外,海报的原始意图虽然有效,但可能非常缓慢,因为每个链接测试都将在.renderor下重新创建一组所有链接。renderor更简单,开销更小
而不是(“.render a”)
完全正确。我在想我需要另一个筛选函数,并记住不仅需要一个jQuery对象,我正在将其标记为正确的,而且我只是将
.not('render a')
插入了我的原始文件中。谢谢实际上,使用
.not($('.render a'))
可能会更有效,因为.render a链接列表只会被组装一次。这就是我试图在我的原始代码中展示的。或者更简单、开销更小的
而不是(“.render a”)
非常正确。我在想我需要另一个筛选函数,并记住不仅需要一个jQuery对象,我正在将其标记为正确的,而且我只是将
.not('render a')
插入了我的原始文件中。谢谢实际上,使用
.not($('.render a'))
可能会更有效,因为.render a链接列表只会被组装一次。这就是我试图在我的原始代码中显示的内容。这会生成一个错误:uncaughtreferenceerror:a未定义应该是string
'a'
,除此之外,这种方法效率非常低。取决于DOM的构造方式(我们不知道,可能会发生变化)。至少为每个a元素生成一个额外的jQuery对象。这会生成一个错误:未捕获引用错误:a未定义应该是字符串
'a'
,除此之外,这种方法效率非常低。取决于DOM的构造方式(我们不知道,可能会发生变化)。至少为每个元素生成一个额外的jQuery对象。
jQuery('a').filter(function() {
  var hostMatch = this.hostname != window.location.hostname,
    isRenderItem = $(this).closest(".render").length;
  return hostMatch && !isRenderItem;
}).attr('target', '_blank');