.pushStack()
crea un nuevo objeto jQuery que hereda el estado de un objeto jQuery anterior.
Este estado heredado permite que métodos como .end()
y .self()
funcionen correctamente. En su ejemplo de código particular, no está utilizando el valor de retorno de .pushStack()
que es el nuevo objeto jQuery.
Al trabajar con objetos jQuery, es importante saber que la mayoría de las operaciones que cambian los objetos DOM en un objeto jQuery devuelven un nuevo objeto jQuery con el cambio en vez de modificar el objeto jQuery existente. Es esta característica de diseño la que les permite mantener esta pila de objetos jQuery previamente modificados.
En su caso, no creo que necesite usar .pushStack()
y probablemente pueda simplemente usar .add()
(que también devuelve un nuevo objeto jQuery) pero no está exactamente claro para mí lo que está intentando para hacerlo, no estoy seguro exactamente qué código recomendar.
Para lograr el resultado final HTML que mostró en su pregunta, usted puede hacer esto:
$(function() {
$("p").add("div").css("color", "#f00").appendTo(document.body);
});
Se podría, obviamente, cambiar el .appendTo()
a lo que usted va a hacer con los nuevos objetos DOM.
En sus comentarios, preguntó algo más sobre cuándo se usaría pushStack()
. Creo que el uso principal es en los métodos jQuery que devuelven un nuevo objeto jQuery. En ese caso, usted crea la nueva lista de elementos que desea en el nuevo objeto jQuery y luego, en lugar de convertirlo en un objeto jQuery normal y devolverlo, llama al return this.pushStack(elems)
. Esto termina creando un nuevo objeto jQuery y devolviéndolo, pero también vincula ese nuevo objeto al objeto anterior para que los comandos especiales como .end()
puedan funcionar cuando se usan en el encadenamiento.
El método jQuery .add()
es un ejemplo clásico. En pseudocódigo, lo que hace es esto:
add: function(selector, context) {
// get the DOM elements that correspond to the new selector (the ones to be added)
// get the DOM elements from the current jQuery object with this.get()
// merge the two arrays of elements together into one array
return this.pushStack(combinedElems);
}
Aunque es vago, es conciso (como es el ejemplo). Presiona los elementos ** DOM ** en la pila, no los elementos envueltos en jQuery. –
Gracias, ¿cuál es la diferencia? –
posible duplicado de [jQuery pushStack] (http://stackoverflow.com/questions/4399055/jquery-pushstack) – Mottie