jQuery: ¿Seleccionar atributos de datos que no están vacíos?


95

Estoy tratando de seleccionar todos los elementos que tienen un data-go-toatributo que no está vacío.

Lo he intentado, $('[data-go-to!=""]')pero por extraño que parezca, parece estar seleccionando cada elemento en la página si hago eso.

Respuestas:


76

tratar

$(':not([data-go-to=""])')

ACTUALIZAR:

Para no desviar a nadie, esta respuesta funcionará en versiones anteriores de jQuery, pero no está preparada para el futuro. Dado que las respuestas de @gmo y @ siva parecen funcionar con versiones posteriores, aplazo (y les animo a que voten a favor) sus respuestas ... y, por supuesto, espero que tengan un día fantástico.


gracias, esto funcionó muy bien! Quería seleccionar solo elementos de imagen, así que agregué $ (': not (img [data-go-to == ""]')
msanjay

2
¿No selecciona esto todos los elementos que no tienen un atributo 'data-to-go' en blanco? ¿Cuando el autor de la pregunta quiere todos los elementos con ese atributo que no están en blanco? (como se resuelve la respuesta de Siva Charan)
rodnaph

tampoco necesito comillas dobles ... como en $('element:not([attribute=])'); // gets all of <element attribute="">o$(':not([attribute=])'); // gets all of <* attribute="">
Anthony Hatzopoulos

2
Esto obtiene todos los elementos para mí, incluido el que tiene el atributo de datos que estoy buscando
Abogado del Diablo

No parece funcionar en Safari, pero lo $('[data-go-to!=""]:[data-go-to]')hace.
Dan

184

Solo como referencia adicional, y una actualización (may'14) (aug'15) (sep'16) (apr'17) (mar'18) (mar'19) ( may'20 ) ...
Respuesta que funciona con:

Cadenas vacías:

Si debe existir y podría tener algún valor (o ninguno)attr

    jQuery("[href]");

Atributos faltantes:

Si pudiera existir y si existe, debe tener algún valor attr

    jQuery("[href!='']");

O ambos:

Si debe existir y tiene que tener algún valor ... attr

    jQuery("[href!=''][href]");

PD : más combinaciones son posibles ...


Verifique esta prueba en jsFiddle para ver ejemplos:


O aquí en SO con este fragmento de código .

* El fragmento está ejecutando jQuery v2.1.1


6
eso es todo. Vota a este usuario aquí mismo. las otras respuestas anteriores no me funcionan. Usé el tercer ejemplo.
Valamas

Secundado @ Valamas-AUS
Adam Waite

Editar: Se agregó un fragmento de código SO, para que pueda probarlo aquí mismo.
GMO

Este es el que está funcionando. $(':not([data-go-to=""])')ya no funciona
Matthieu Charbonnier

1
Gracias por mantener la respuesta actualizada
Anthony C

19
$('[data-go-to!=""]:[data-go-to]').each(function() {
    // Do Your Stuff
});​

6
Esta funciona para las cadenas vacías y atributos que faltan, perfectos
adamJLev

4
a partir de mayo'14 no funciona, da Unrecognized Expressionerror.
coding_idiot

7

Tiene 'nombre de atributo de datos' y su valor no está vacío:

$('[data-attributename]:not([data-attributename=""])')

Tiene 'nombre de atributo de datos' vacío o no:

$('[data-attributename]')

Ejemplo de JS Fiddle


1
Esta es la única respuesta que todavía me funciona en junio de 2015.
AlexioVay




2
$('[data-go-to]').filter(function() {
    return $(this).data('go-to')!="";
});

Utilizando :not, .not(), :emptyetc sólo se comprobará si el propio elemento está vacío, no el atributo de datos. Para eso, tendrá que filtrar según el valor de los atributos de datos.

VIOLÍN


1

Esto funciona para mi

$('[attributename]').filter('[attributename!=""]')

Sin embargo, estas son dos iteraciones.
Jens


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.