Preciso selecionar elementos com base nos valores armazenados no .data()
objeto de um elemento . No mínimo, gostaria de selecionar propriedades de dados de nível superior usando seletores, talvez assim:
$('a').data("category","music");
$('a:data(category=music)');
Ou talvez o seletor esteja no formato regular de seletor de atributos:
$('a[category=music]');
Ou no formato de atributo, mas com um especificador para indicar que está em .data()
:
$('a[:category=music]');
Eu achei a implementação de James Padolsey simples, mas boa. O seletor formata os métodos de espelhamento mostrados nessa página. Há também este patch Sizzle .
Por alguma razão, lembro de ler um tempo atrás que o jQuery 1.4 incluiria suporte para seletores de valores no .data()
objeto jquery . No entanto, agora que estou procurando, não consigo encontrá-lo. Talvez tenha sido apenas uma solicitação de recurso que eu vi. Existe suporte para isso e eu simplesmente não estou vendo?
Idealmente, eu gostaria de oferecer suporte a subpropriedades em data () usando a notação de ponto. Como isso:
$('a').data("user",{name: {first:"Tom",last:"Smith"},username: "tomsmith"});
$('a[:user.name.first=Tom]');
Também gostaria de oferecer suporte a vários seletores de dados, onde apenas elementos com TODOS os seletores de dados especificados são encontrados. O seletor múltiplo de jquery regular faz uma operação OR. Por exemplo, $('a.big, a.small')
seleciona a
tags com classe big
ou small
). Estou procurando um AND, talvez assim:
$('a').data("artist",{id: 3281, name: "Madonna"});
$('a').data("category","music");
$('a[:category=music && :artist.name=Madonna]');
Por fim, seria ótimo se operadores de comparação e recursos regex estivessem disponíveis nos seletores de dados. Então $(a[:artist.id>5000])
seria possível. Sei que provavelmente poderia fazer muito disso usando filter()
, mas seria bom ter um formato seletor simples.
Quais soluções estão disponíveis para fazer isso? O Padolsey de Jame é a melhor solução no momento? Minha preocupação é principalmente com relação ao desempenho, mas também aos recursos extras, como notação de ponto de subpropriedade e vários seletores de dados. Existem outras implementações que suportam essas coisas ou são melhores de alguma forma?