type tag name all jquery filter ancestor descendant

tag - Jquery: obtener ancestros(o descendientes) y yo



tag jquery (5)

Busque la función "andSelf ()".

Se puede usar matchedset.find(selector) / matchedset.parents(selector) para obtener los descendientes / ancestros del conjunto coincidente actual filtrado por un selector, pero eso no incluye el conjunto coincidente en sí (si coincide con el selector también). ¿Hay 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 los padres ()?


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

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

Entonces úsalo así:

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

Si quieres ser elegante, puedes crear un complemento que funcione no solo para ''buscar'' sino para ''padres'' y ''hijos'' y otros complementos basados ​​en selectores:

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

Luego, debe proporcionar como primer argumento el plugin transversal que desea llamar:

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

Solo por diversión, otro plugin divertido que te permite llamar a una cantidad arbitraria de complementos transversales de una sola vez:

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

Puede invocar este con cualquier combinación de complementos basados ​​en selector, de la siguiente manera:

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


Para los padres que tienes closest(selector)


Puedes hacerlo:

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

Para padres:

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


Si bien la solución de Jeoff es agradable, a veces es bueno poder repetir todos los elementos, incluido él mismo, 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)); };