Seleccionar elementos que he configurado previamente con jquery.data();
es decir, seleccione todos los elementos que .data('myAttr')
ya se han configurado.
SOLUCIÓN
Un jsfiddle para demostrar es Fiddle
Seleccionar elementos que he configurado previamente con jquery.data();
es decir, seleccione todos los elementos que .data('myAttr')
ya se han configurado.
SOLUCIÓN
Un jsfiddle para demostrar es Fiddle
Respuestas:
Podrías hacerlo
$('[data-myAttr!=""]');
esto selecciona todos los elementos que tienen un atributo data-myAttr
que no es igual a '' (por lo que debe haber sido establecido);
también puedes usar filter ()
$('*').filter(function() {
return $(this).data('myAttr') !== undefined;
});
La mejor y más sencilla forma de seleccionarlos es:
$('[data-myAttr]')
Más información:
Probé muchas cosas.
El uso $('[data-myAttr!=""]')
no funciona en todos los casos. Porque los elementos que no tienen un data-myAttr
conjunto tendrán su data-myAttr
igual undefined
y $('[data-myAttr!=""]')
los seleccionarán también, lo cual es incorrecto.
Puede usar filter () :
var elements = $("*").filter(function() {
return $(this).data("myAttr") !== undefined;
});
$('[data-myAttr]')
?
data()
formulario getter de hecho lee los data-
atributos HTML5 , pero su formulario setter no los crea ni los actualiza.
Puede usar esta extensión de jQuery Selector: Consultando datos de elementos
$(':data'); // All elements with data
$(':not(:data)'); // All elements without data
Puede usar la interfaz de usuario de JQuery con el selector: data ()
Selecciona elementos que tienen datos almacenados bajo la clave especificada.
Mira este jsfiddle para ver un ejemplo
Para que todos los elementos coincidan .data('myAttr')
, puede usar
var matches = $(':data(myAttr)');
Esto debería funcionar tanto para elementos con data-
atributos como para elementos con datos almacenados usando $.data()
porque
A partir de jQuery 1.4.3 HTML 5, los atributos de datos se incorporarán automáticamente al objeto de datos de jQuery.
Pero esto no funciona muy bien. Mira este jsfiddle y verá que la segunda vez que se llama al selector, debe coincidir con 2 elementos y solo coincide con uno. Esto se debe a "un error" en la biblioteca jquery-ui.
Esto se toma del archivo principal jquery-ui.
$.extend( $.expr[ ":" ], {
data: $.expr.createPseudo ?
$.expr.createPseudo(function( dataName ) {
return function( elem ) {
return !!$.data( elem, dataName );
};
}) :
// support: jQuery <1.8
function( elem, i, match ) {
return !!$.data( elem, match[ 3 ] );
}
});
Como puede ver, están usando en su $.data(elem, match)
lugar, lo $(elem).data(match)
que hace que la caché no se actualice en caso de que esté solicitando elementos con data-
atributos. Si el elemento ha sido probado paradata()
almacenamiento, esto funciona bien, pero si no, no se incluirá en las coincidencias resultantes.
Esto podría no ser un error en absoluto si lo que desea es hacer coincidir solo los elementos con la información de datos establecida por usted, pero si no, le quedan dos opciones.
No use jquery-ui y extienda su propio pseudo-selector $(:mydata(myAttr))
$.extend($.expr[":"], {
mydata: $.expr.createPseudo ?
$.expr.createPseudo(function(dataName) {
return function(elem) {
return !!$(elem).data(dataName);
};
}) : function(elem, i, match) {
return !!$(elem).data(match[3]);
}
});
Use jquery-ui con el :data
pseudoselector y una los resultados de la selección [data-myAttr]
para incluir los que podrían omitirse
var matches = $(':data(myAttr)', '[data-myAttr]')
Seleccionar elementos que he configurado previamente conjquery.data();
La pregunta es encontrar todos los elementos con una clave específica y no ningún dato.
Intenta utilizar jQuery.data()
$(".myClass").each(function(i){
if( i % 2 == 0 ){
$(this).data("myAttr",i + 1);
}
});
var res = $(".myClass").map(function(i) {
console.log($(this).data("myAttr"));
return $.data(this, "myAttr") !== undefined ? this : null
});
console.log(res);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<div class="myClass">1</div>
<div class="myClass">2</div>
<div class="myClass">3</div>
<div class="myClass">4</div>
<div class="myClass">5</div>
jsfiddle http://jsfiddle.net/xynZA/142/
html
data-*
conjunto de atributos, así como un jQuery.data()
conjunto?
$('[data-myAttr]')