一个可以使用的matchedset.find(selector) / matchedset.parents(selector)获得后代/电流匹配组由一个选择器过滤,但不包括所述匹配组本身(如果它发生到选择太匹配)的祖先。有没有更好的(更简洁和/或更快)的方式来获得比

matchedset.find(selector).add(matchedset.filter(selector))

和相应的父母()?

有帮助吗?

解决方案

您可以这样做:

matchedset.find('*').andSelf().filter(selector);

有关父母:

matchedset.parents('*').andSelf().filter(selector);

其他提示

我觉得你的方法是在执行时间方面是高效的,但你可能会问的是语法糖。对于这一点,你可以把它包装成一个插件:

  jQuery.fn.findAndSelf = function(selector) {
    return this.find(selector).add(this.filter(selector))
  }

然后,使用这样的:

$('.whatever').findAndSelf('.awesome')

如果你想获得看上你可以创建一个不仅为“发现”,但对“父母”和“孩子”和其他基于选择器插件工作的插件:

  jQuery.fn.withSelf = function(plugin, selector) {
    return this[plugin](selector).add(this.filter(selector))
  }

然后,你提供的第一个参数遍历插件,你想呼叫:

$('.whatever').withSelf('find', '.awesome')
$('.whatever').withSelf('parents', '.awesome')

只是踢,另一个有趣的插件,让你叫穿越任意数量的插件,全部一次:

  jQuery.fn.traverse = function(plugins, selector) {
    var set = new jQuery();
    $.each(plugins, function(i, val) {
      set.add(this[val](selector));
    }
    return set
  }

您可以援引这一个与基于选择器插件的任何组合,如下所示:

$('.whatever').traverse(['find','filter'], '.awesome')
$('.whatever').traverse(['parents','find'], '.awesome')
$('.whatever').traverse(['parents', 'filter'], '.awesome')

虽然Jeoff的解决方案是很好的,有时它的很好能够迭代的所有元素,包括自身不具有选择器。此附加是一个比较灵活:

$.fn.all = function(selector) {
    if(selector===window.undefined) return this.find('*').andSelf();
    return this.filter(selector).add(this.find(selector));
};

中查找 “andSelf()” 函数。

有关父母你有closest(selector)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top