Pregunta

uno puede usar matchedset.find(selector) / matchedset.parents(selector) para que un selector filtre los descendientes/ancestros del conjunto coincidente actual, pero eso no incluye el conjunto coincidente en sí (si coincide con el selector también).¿Existe una manera mejor (más concisa y/o más rápida) de obtenerlo que

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

y el respectivo para padres() ?

¿Fue útil?

Solución

Usted puede hacer esto:

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

Para los padres:

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

Otros consejos

Creo que su método es eficiente en términos de tiempo de ejecución, pero lo que probablemente está pidiendo es el azúcar sintáctica. Por eso, usted podría envolverlo en un plugin:

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

A continuación, utilizar de esta manera:

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

Si usted quiere conseguir la suposición podría crear un plugin que funciona no sólo para 'encontrar' pero por 'padres' y 'niños' y otros complementos a base de selectores:

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

A continuación, había suministrar como primer argumento el recorrido plug-in que desea llamar:

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

Sólo por diversión, otro divertido plugin que le permite llamar a un número arbitrario de recorrido plugins todos a la vez:

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

Se podría invocar éste con cualquier combinación de complementos a base de selectores, de la siguiente manera:

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

Mientras que la solución de Jeoff es agradable, a veces es bueno ser capaz de recorrer todos los elementos, incluyendo a sí misma sin un selector. Este complemento es un poco más flexible:

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

Busque el "andSelf ()" función.

Para los padres que usted ha closest(selector)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top