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.