Me encontré con una situación en la que estoy creando un objeto jQuery a partir de una cadena html y necesito seleccionar todos los elementos dentro de él con una clase particular.¿Por qué el siguiente selector jQuery no devuelve ambos elementos?
Lo que me resulta extraño es que devuelva uno u otro, dependiendo del tipo de mecanismo de selección que estoy usando. Un caso de prueba se muestra aquí:
var tmpl = '<ul><li class="foo">TEST</li></ul><div class="foo">BAR</div>';
console.log($('.foo', tmpl)); //[<li class="foo">TEST</li>]
console.log($(tmpl).find('.foo')); //[<li class="foo">TEST</li>]
console.log($(tmpl).filter('.foo')); //[<div class="foo">BAR</div>]
En este ejemplo, tanto un elemento li en un ul y una div no descendiente tienen la clase "foo". En el ejemplo, uso el selector .foo y establezco el contexto en la cadena de la plantilla. En segundo lugar, uso .find() en la cadena. Finalmente, uso .filter() en la cadena.
¿Alguien puede explicar por qué los mecanismos del selector están actuando como lo hacen, y también cómo lograr el objetivo que mencioné al principio?
Tiene sentido. Gracias por la respuesta. – Geuis