过滤具有特定类作为祖先的元素

时间:2016-01-12 22:28:24

标签: javascript jquery

我有一个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');

这不仅不起作用,控制台还说parents不是函数。

2 个答案:

答案 0 :(得分:2)

由于您已经在使用一个过滤器,因此无需使用not()添加另一个过滤器。只需在filter()

中添加额外条件即可
jQuery('a').filter(function() {
  var hostMatch = this.hostname != window.location.hostname,
    isRenderItem = $(this).closest(".render").length;
  return hostMatch && !isRenderItem;
}).attr('target', '_blank');

答案 1 :(得分:1)

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