first ejemplos child javascript jquery html jquery-selectors

javascript - ejemplos - jquery first child



Tienda jquery selector en variable (2)

Creo que la respuesta aceptada es excelente, pero podría interpretarse como una sugerencia de que asignar objetos JQuery a variables siempre es inseguro. Hacerlo está bien, siempre y cuando el objeto DOM las referencias de la variable no se alteren antes de acceder a él de una manera que afecte el código posterior .

HTML

<div id="banner-message"> <p>Hello World</p> <button>Change view</button> </div>

JavaScript

// find elements var banner = $("#banner-message") var button = $("button") // handle click and add class button.on("click", function(){ banner.addClass("alt"); banner.hide().html("New HTML").fadeIn(2000); })

JsFiddle

En el siguiente ejemplo, el stored jQuery selector devuelve el valor incorrecto. ¿Existe la posibilidad de almacenar los selectores y no el resultado?

El código js:

// storing the jQuery selectors var $container = $( ''.container'' ), $element1 = $container.find( ''.element'' ), $element2 = $( ''.element'', $container ), $element3 = $( ''.element'' ); // append elements to the container for( i=0; i<10; ++i ){ $container.append( $(element_html) ); } // try the stored selectors -> returns 0 console.log( "1: " + $element1.length ); console.log( "2: " + $element2.length ); console.log( "3: " + $element3.length );

¿Por qué, si uso los selectores de contenedores para encontrar los elementos, funciona? ¿Se debe a que el selector devuelve el pointer a los elementos coincidentes y no a los elementos?

// this works console.log( "1: " + $container.find( ''.element'' ).length ); console.log( "2: " + $( ''.element'', $container ) .length ); console.log( "3: " + $( ''.element'' ) .length );

Demostración de jsFiddle


Tienes un malentendido fundamental de lo que

variableName = $("selector here");

hace. No "almacena el selector". Ejecuta el selector que le das contra los elementos actuales en el DOM, crea un objeto jQuery, coloca los elementos coincidentes en el objeto jQuery y le da una referencia a ese objeto jQuery. El selector no está almacenado (modulo jQuery internals).

Entonces dado:

<body> <div class="foo">x</div> </body>

Entonces:

var $divs = $("div.foo"); console.log($divs.length); // 1

Nos da esto:

Si luego agregamos otro div coincidente:

$(''<div class="foo"></div>'').appendTo(document.body);

Nuestros $divs solo apuntan al primero; agregar otro elemento coincidente al DOM no tuvo efecto en el objeto jQuery al que se hace referencia desde $divs .

Si volvemos a ejecutar la consulta en ese punto:

$divs = $("div.foo");

...entonces nosotros tenemos:

Si tiene un objeto jQuery que contiene un elemento DOM y agrega elementos descendientes a ese elemento DOM, entonces, al usar ese objeto jQuery con (por ejemplo) .find verá los descendientes. Esto se debe a que el elemento DOM principal ya está allí en el objeto jQuery. Por ejemplo, agregando un span a uno de los div s que ya hacemos referencia desde nuestro objeto jQuery:

Si tuviéramos que usar .find en $divs en ese punto buscando un span , lo encontraríamos, porque es un descendiente de uno de los elementos a los que ya teníamos una referencia.

Si desea volver a ejecutar la búsqueda de DOM más tarde para buscar elementos coincidentes, simplemente use $() nuevo; esto está implícito en lo anterior, pero para mayor claridad:

var $divs = $("div.foo"); console.log($divs.length); // 1 $(''<div class="foo"></div>'').appendTo(document.body); console.log($divs.length); // Still 1 $divs = $("div.foo"); console.log($divs.length); // Now it''s 2

Por lo tanto, "almacenar un selector", cuando sea necesario, es cuestión de almacenar la cadena del selector en algún lugar, no el objeto jQuery.