jQuery: Pilih atribut data yang tidak kosong?

95

Saya mencoba memilih semua elemen yang memiliki data-go-toatribut yang tidak kosong.

Saya sudah mencoba $('[data-go-to!=""]')tetapi anehnya tampaknya memilih setiap elemen di halaman jika saya melakukan itu.

Shpigford
sumber

Jawaban:

76

mencoba

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

MEMPERBARUI:

Demi tidak menyesatkan siapa pun, jawaban ini akan berfungsi di versi jQuery yang lebih lama tetapi tidak tahan masa depan. Karena @gmo dan @ siva jawaban keduanya tampaknya berfungsi dengan versi yang lebih baru, saya menunda (dan mendorong Anda untuk memberi suara positif) jawaban mereka .... dan tentu saja semoga hari Anda menyenangkan.

Benjamin Oman
sumber
terima kasih, ini bekerja dengan baik! Saya hanya ingin memilih elemen gambar, jadi saya menambahkan $ (': not (img [data-go-to == ""]')
msanjay
2
Apakah ini tidak memilih semua elemen yang tidak memiliki atribut 'data-to-go' kosong? Ketika penanya menginginkan semua elemen dengan atribut itu tidak kosong? (sebagai jawaban Siva Charan memutuskan)
rodnaph
tidak benar-benar membutuhkan tanda kutip ganda baik ... seperti $('element:not([attribute=])'); // gets all of <element attribute="">atau$(':not([attribute=])'); // gets all of <* attribute="">
Anthony Hatzopoulos
2
Ini mendapatkan setiap elemen untuk saya, termasuk yang memiliki atribut data yang saya cari
Pengacara Setan
Sepertinya tidak berfungsi di Safari tetapi berfungsi $('[data-go-to!=""]:[data-go-to]').
Dan
184

Hanya sebagai referensi lebih lanjut, dan up-to-date (may'14) (aug'15) (sep'16) (apr'17) (mar'18) (mar'19) ( may'20 ) ...
Jawaban yang sesuai dengan:

String kosong:

Jika harus ada & dapat memiliki nilai apa pun (atau tidak sama sekali)attr

    jQuery("[href]");

Atribut yang hilang:

Jika bisa ada & jika ada, pasti punya nilai attr

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

Atau keduanya:

Jika harus ada & harus memiliki nilai ... attr

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

PS : lebih banyak kombinasi dimungkinkan ...


Periksa tes ini di jsFiddle untuk contoh:


Atau di sini, di SO dengan Cuplikan Kode ini .

* Snippet menjalankan jQuery v2.1.1

gmo
sumber
6
ini dia. Beri suara positif untuk pengguna ini di sini. jawaban lama lainnya tidak berhasil untuk saya. Saya menggunakan contoh ketiga.
Valamas
Seconded @ Valamas-AUS
Adam Waite
Edit: Menambahkan Cuplikan Kode SO, sehingga Anda dapat mengujinya di sini.
gmo
Ini adalah salah satu yang berhasil. $(':not([data-go-to=""])')tidak berfungsi lagi
Matthieu Charbonnier
1
Terima kasih telah menjaga jawabannya tetap terbaru
Anthony C
19
$('[data-go-to!=""]:[data-go-to]').each(function() {
    // Do Your Stuff
});​
Siva Charan
sumber
6
Yang ini berfungsi untuk string kosong dan atribut yang hilang, sempurna
adamJLev
4
pada May'14 tidak berfungsi, memberikan Unrecognized Expressionkesalahan.
coding_idiot
7

Memiliki 'data-atributename' dan nilainya tidak kosong:

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

Memiliki 'data-atributename' kosong atau tidak:

$('[data-attributename]')

Contoh JS Fiddle

Jelgab
sumber
1
Ini adalah satu-satunya jawaban yang masih berfungsi untuk saya di bulan Juni 2015.
AlexioVay
5

Saya tidak yakin tentang pemilih sederhana, tetapi Anda dapat menggunakan filter():

$('[data-go-to]').filter(
    function(){
        return ($(this).attr('data-go-to').length > 0);
    });

Demo JS Fiddle .

Referensi:

David mengatakan kembalikan Monica
sumber
4

Menurut dokumentasi, ini harus dilakukan

:not([attr="value"])

DEMO

Semoga ini membantu

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

JSBIN

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

Menggunakan :not, .not(), :emptydll hanya akan memeriksa apakah unsur itu sendiri kosong, tidak atribut data. Untuk itu Anda harus memfilter berdasarkan nilai atribut data.

BIOLA

adeneo
sumber
1

Ini berhasil untuk saya

$('[attributename]').filter('[attributename!=""]')
Mardok
sumber
Ini adalah dua iterasi.
Jens
0

Coba ini :

$('[data-go-to:not(:empty)]')
Pascal Boutin
sumber
1
Tidak pergi. "Syntax error, unrecognized expression: [data-go-to:not(:empty)]"
Shpigford
api.jquery.com/empty-selector api.jquery.com/not-selector Menurut ini, akan dianggap bekerja, sedih, itu akan menjadi solusi yang bersih!
Pascal Boutin
0

Ini bekerja untuk saya:

$('.data .title td[data-field!=""]')
V. Kovpak
sumber