Selecione os elementos que defini anteriormente com jquery.data();
ou seja, selecione todos os elementos .data('myAttr')
já definidos.
SOLUÇÃO
Um jsfiddle para demonstrar é Fiddle
Selecione os elementos que defini anteriormente com jquery.data();
ou seja, selecione todos os elementos .data('myAttr')
já definidos.
SOLUÇÃO
Um jsfiddle para demonstrar é Fiddle
Respostas:
Você poderia fazer
$('[data-myAttr!=""]');
isso seleciona todos os elementos que têm um atributo data-myAttr
que não é igual a '' (portanto, deve ter sido definido);
você também pode usar o filtro ()
$('*').filter(function() {
return $(this).data('myAttr') !== undefined;
});
A melhor e simples maneira de selecioná-los é:
$('[data-myAttr]')
Mais Informações:
Eu testei muitas coisas.
Usar $('[data-myAttr!=""]')
não funciona para todos os casos. Porque os elementos que não possuem um data-myAttr
conjunto, terão seus data-myAttr
iguais undefined
e $('[data-myAttr!=""]')
os selecionarão também, o que é incorreto.
Você pode usar o filtro () :
var elements = $("*").filter(function() {
return $(this).data("myAttr") !== undefined;
});
$('[data-myAttr]')
?
data()
o formulário getter de realmente lê os data-
atributos HTML5 , mas seu formato setter não os cria nem os atualiza.
Você pode usar esta extensão do jQuery Selector: Consultando dados do elemento
$(':data'); // All elements with data
$(':not(:data)'); // All elements without data
Você pode usar JQuery UI com o seletor: data ()
Seleciona elementos que possuem dados armazenados na chave especificada.
Verifique este jsfiddle para um exemplo
Para obter todos os elementos correspondentes, .data('myAttr')
você pode usar
var matches = $(':data(myAttr)');
Isso deve funcionar para elementos com data-
atributos e elementos com dados armazenados usando $.data()
porque
A partir do jQuery 1.4.3 HTML 5, atributos de dados serão automaticamente puxados para o objeto de dados jQuery.
Mas isso não funciona muito bem. Verifique este jsfiddle e você verá que na segunda vez que o seletor é chamado, ele deve corresponder a 2 elementos e está correspondendo apenas a um. Isso se deve a "um bug" na biblioteca jquery-ui.
Isso é obtido do arquivo 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 você pode ver que eles estão usando $.data(elem, match)
, em vez $(elem).data(match)
que faz com que o cache não ser atualizado no caso de você está solicitando elementos com data-
atributos. Se o elemento foi testado para data()
armazenamento, isso funciona bem, mas se não, não será incluído nas correspondências resultantes.
Isso pode não ser um bug se o que você quer é combinar apenas os elementos com as informações de dados definidas por você, mas se não, você tem duas opções.
Não use jquery-ui e estenda seu próprio pseudo-seletor $(: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 com o :data
pseudoselector e junte os resultados da seleção [data-myAttr]
para incluir aqueles que podem ser ignorados
var matches = $(':data(myAttr)', '[data-myAttr]')
Selecione os elementos que defini anteriormente comjquery.data();
A questão é encontrar todos os elementos com uma chave específica e não quaisquer dados.
Tente 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, bem como jQuery.data()
conjunto?
$('[data-myAttr]')