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));
};