jQuery: Selecione os atributos de dados que não estão vazios?


95

Estou tentando selecionar todos os elementos que possuem um data-go-toatributo que não está vazio.

Eu tentei, $('[data-go-to!=""]')mas por incrível que pareça, parece que estou selecionando cada elemento da página se eu fizer isso.

Respostas:


76

experimentar

$(':not([data-go-to=""])')

ATUALIZAR:

Para não enganar ninguém, esta resposta funcionará em versões mais antigas do jQuery, mas não é à prova de futuro. Visto que as respostas de @gmo e @siva parecem estar funcionando com versões posteriores, eu adio (e encorajo você a votar positivamente) em suas respostas ... e é claro, espero que você tenha um dia fantástico.


obrigado, funcionou muito bem! Eu queria selecionar apenas elementos de imagem, então adicionei $ (': not (img [data-go-to == ""]')
msanjay

2
Isso não seleciona todos os elementos que não têm um atributo 'data-to-go' em branco? Quando o autor da pergunta deseja todos os elementos com esse atributo que não estão em branco? (como a resposta de Siva Charan resolve)
rodnaph

realmente não preciso de aspas duplas ... como em $('element:not([attribute=])'); // gets all of <element attribute="">ou$(':not([attribute=])'); // gets all of <* attribute="">
Anthony Hatzopoulos

2
Isso pega todos os elementos para mim, incluindo aquele que tem o atributo de dados que estou procurando
Devil's Advocate

Não parece funcionar no Safari, mas $('[data-go-to!=""]:[data-go-to]')funciona.
Dan,

183

Apenas como referência adicional, e um up-to-date (maio'14) (ago'15) (set'16) (abr'17) (mar'18) (mar'19) ( maio'20 ) ...
Resposta que funciona com:

Strings vazias:

Se o deve existir e pode ter qualquer valor (ou nenhum)attr

    jQuery("[href]");

Atributos ausentes:

Se poderia existir e se existir, deve ter algum valor attr

    jQuery("[href!='']");

Ou ambos:

Se deve existir e deve ter algum valor ... attr

    jQuery("[href!=''][href]");

PS : mais combinações são possíveis ...


Verifique este teste em jsFiddle para exemplos:


Ou aqui no SO com este snippet de código .

* Snippet está executando jQuery v2.1.1


6
é isso. Vote neste usuário aqui. as outras respostas mais antigas não estão funcionando para mim. Usei o terceiro exemplo.
Valamas

Destacado @ Valamas-AUS
Adam Waite

Editar: Adicionado trecho de código SO, para que você possa testá-lo aqui.
gmo

Este é o único que está funcionando. $(':not([data-go-to=""])')não está mais funcionando
Matthieu Charbonnier

1
Obrigado por manter a resposta atualizada
Anthony C

19
$('[data-go-to!=""]:[data-go-to]').each(function() {
    // Do Your Stuff
});​

6
Este funciona para strings vazias e atributos ausentes, perfeito
adamJLev

4
a partir de maio de 14 não funciona, dá Unrecognized Expressionerro.
coding_idiot

7

Possui 'data-attributeename' e seu valor não está vazio:

$('[data-attributename]:not([data-attributename=""])')

Tem 'data-attributeename' vazio ou não:

$('[data-attributename]')

Exemplo JS Fiddle


1
Esta é a única resposta que ainda funciona para mim em junho de 2015.
AlexioVay




2
$('[data-go-to]').filter(function() {
    return $(this).data('go-to')!="";
});

Usando :not, .not(), :emptyetc só irá verificar se o elemento em si está vazio, não o atributo de dados. Para isso, você terá que filtrar com base no valor dos atributos de dados.

FIDDLE


1

Isso funciona para mim

$('[attributename]').filter('[attributename!=""]')

Porém, essas são duas iterações.
Jens


0

Isso funciona para mim:

$('.data .title td[data-field!=""]')
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.