Seleziona gli elementi che ho impostato in precedenza jquery.data();
cioè selezionare tutti gli elementi .data('myAttr')
già impostati.
SOLUZIONE
Un jsfiddle da dimostrare è Fiddle
Seleziona gli elementi che ho impostato in precedenza jquery.data();
cioè selezionare tutti gli elementi .data('myAttr')
già impostati.
SOLUZIONE
Un jsfiddle da dimostrare è Fiddle
Risposte:
Potresti fare
$('[data-myAttr!=""]');
questo seleziona tutti gli elementi che hanno un attributo data-myAttr
che non è uguale a "" (quindi deve essere stato impostato);
potresti anche usare filter ()
$('*').filter(function() {
return $(this).data('myAttr') !== undefined;
});
Il modo migliore e semplice per selezionarli è:
$('[data-myAttr]')
Maggiori informazioni:
Ho provato molte cose.
L'uso $('[data-myAttr!=""]')
non funziona per tutti i casi. Perché gli elementi che non hanno un data-myAttr
set avranno il loro data-myAttr
uguale undefined
e $('[data-myAttr!=""]')
selezioneranno anche quelli, il che non è corretto.
Puoi usare filter () :
var elements = $("*").filter(function() {
return $(this).data("myAttr") !== undefined;
});
$('[data-myAttr]')
?
data()
il modulo getter di effettivamente legge gli data-
attributi HTML5 , ma il suo modulo setter non li crea né li aggiorna.
È possibile utilizzare questa estensione jQuery Selector: query sui dati dell'elemento
$(':data'); // All elements with data
$(':not(:data)'); // All elements without data
Puoi utilizzare l'interfaccia utente di JQuery con il selettore: data ()
Seleziona gli elementi che hanno dati archiviati nella chiave specificata.
Controlla questo jsfiddle per un esempio
Per ottenere tutti gli elementi corrispondenti .data('myAttr')
puoi utilizzare
var matches = $(':data(myAttr)');
Questo dovrebbe funzionare sia per gli elementi con data-
attributi che per gli elementi con dati memorizzati utilizzando $.data()
because
A partire da jQuery 1.4.3 gli attributi di dati HTML 5 verranno automaticamente inseriti nell'oggetto dati di jQuery.
Ma questo non funziona molto bene. Controlla questo jsfiddle e vedrai che la seconda volta che viene chiamato il selettore dovrebbe corrispondere a 2 elementi e ne corrisponde solo uno. Ciò è dovuto a "un bug" nella libreria jquery-ui.
Questo è preso dal file jquery-ui principale.
$.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 ] );
}
});
Come si può vedere che stanno utilizzando $.data(elem, match)
, invece $(elem).data(match)
, che fa sì che la cache non essere aggiornato nel caso in cui si richiede elementi con data-
attributi. Se l'elemento è stato testato per l' data()
archiviazione, funziona bene ma in caso contrario non sarà incluso nelle corrispondenze risultanti.
Questo potrebbe non essere affatto un bug se quello che vuoi è abbinare solo gli elementi con le informazioni sui dati impostate da te, ma in caso contrario ti rimangono due opzioni.
Non usare jquery-ui ed estendi il tuo pseudo-selettore $(: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]);
}
});
Usa jquery-ui con lo :data
pseudoselettore e unisci i risultati della selezione [data-myAttr]
per includere quelli che potrebbero essere saltati
var matches = $(':data(myAttr)', '[data-myAttr]')
Seleziona gli elementi che ho impostato in precedenzajquery.data();
La domanda è trovare tutti gli elementi con una chiave specifica e non i dati.
Prova a utilizzare 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-*
set di attributi, oltre che jQuery.data()
impostati?
$('[data-myAttr]')