Seleccione elementos JQuery que tengan algún valor establecido por data () [duplicado]

Posible duplicado:
selector de datos jquery

Tengo varios elementos con clase 'connection_name'. Cada uno de estos elementos tiene una identificación única vinculada a él mediante la función data() JQuery. Estoy tratando de consultar para encontrar el elemento con una identificación dada, pero parece que no puedo hacer que funcione.

Por el bien de esta prueba, creé una página con solo 1 elemento y configuré la identificación del elemento.

Puedo verificar que se está configurando la identificación, ya que cuando consulto el elemento en la consola, muestra la identificación devuelta:

$('.connection_name').data()
  Object
  id: "4fea76bd99ea080d19000002"
  __proto__: Object

He leído en otras preguntas/publicaciones que el elemento debe ser seleccionado por $('selector[data-attribute=value]'), pero eso no parece funcionar:

$('.connection_name[data-id="4fea76bd99ea080d19000002"]')
[]

Peor que eso, incluso cuando trato de seleccionarlo sin ningún valor (solo por el atributo), todavía no devuelvo nada:

$('.connection_name[data-id]')
[]

No estoy seguro de cuál es el problema, o cómo hacer esto.

preguntado el 01 de julio de 12 a las 02:07

Ese enlace tiene una respuesta perfecta (si la respuesta de @ jfriend00 no es lo suficientemente buena):

@Thomas, en realidad, el enlace que proporcionó no ayuda en absoluto. En esa respuesta, sugieren que $('selector[data-attribute=value]') funcionará y no lo hace, de ahí mi pregunta. -

La respuesta tiene una gran cantidad de código para que funcione. Lea la respuesta aceptada. -

No, realmente no lo hace. No es una respuesta adecuada en absoluto. Jfriend proporcionó una respuesta mucho más clara y mejor. -

1 Respuestas

He aquí una forma de hacerlo:

var theItem = $('.connection_name').filter(function() {
    return($(this).data("id") === "4fea76bd99ea080d19000002");
});

Respondido 01 Jul 12, 02:07

Esto funciona bien, gracias amigo. ¿Sabe por qué el patrón $('selector[data-attribute=value]') no funciona? Varias fuentes parecen afirmar que sí. Gracias de nuevo. - ryan ogle

Son dos cosas diferentes. Si establece atributos data-* en los elementos, jQuery los lee UNA VEZ, en el documento listo, y los sincroniza con su almacenamiento de datos interno. Si actualiza estos valores más tarde, utilizando .data(), los atributos no cambiarán. De la misma manera, si actualiza los atributos data-* usando .attr(), el almacenamiento de datos interno de jQuery no cambiará. Entonces, en su lugar, debe iterar sobre cada elemento que se ajuste a sus criterios y leer sus datos. - Interrobang

@RyanOgle: cuando realiza un selector de atributos, SOLO lee los atributos del objeto DOM real, por lo tanto '.connection_name[id="4fea76bd99ea080d19000002"]' solo funcionará si hay un atributo de identificación de datos en el objeto con ese valor. Este solo será el caso si el atributo está presente en el HTML o si está configurado con .attr(). Si el valor de id se establece con .data("id", "4fea76bd99ea080d19000002"), entonces el valor NO se establece como un atributo en el objeto (se establece en una estructura de datos interna dentro de jQuery) y, por lo tanto, no se encontrará mediante una operación de selección. - amigo00

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.