pemilih jQuery untuk input dengan tanda kurung siku di atribut nama


180

Saya mencoba memilih elemen ini yang memiliki tanda kurung siku di atribut nama:

<input type="text" name="inputName[]" value="someValue">

Saya sudah mencoba ini (yang tidak berhasil):

$('input[inputName[]=someValue]')

dan tidak juga ini:

$('input[inputName&#91;&#93;=someValue]')

atau ini:

$('input["inputName[]"=someValue]')

EDIT: Seperti beberapa dari Anda tunjukkan, $('input[inputName=someValue]')tidak akan pernah berhasil. Apa yang saya coba lakukan adalah: $('input[name=inputName][value=someValue]'). (Tetapi dengan []dalam atribut nama).

Jawaban:


263

Per dokumentasi jQuery , coba ini:

$('input[inputName\\[\\]=someValue]')

[EDIT] Namun, saya tidak yakin itu sintaks yang tepat untuk pemilih Anda. Anda mungkin ingin:

$('input[name="inputName[]"][value="someValue"]')

32
Tangkapan yang bagus. Alasan untuk membutuhkan dua garis miring terbalik adalah karena garis miring terbalik tunggal ditafsirkan sebagai karakter pelarian string JavaScript, jadi Anda perlu dua garis miring untuk menentukan garis miring terbalik literal, yang menyediakan karakter melarikan diri ke pemilih ... ah, kegembiraan dari berbagai tingkat karakter melarikan diri.
Peter

Terima kasih untuk itu. Itu hanya masalah menggunakan ekspresi reguler. Ini sangat berguna ketika mengirimkan data formulir langsung ke array atau daftar dalam kerangka tampilan favorit Anda. Itu juga membantu saya menjawab pertanyaan tentang menghapus objek dengan beberapa elemen kunci utama. ;)
Luiz Feijão Veronesi

79

Anda dapat menggunakan backslash untuk mengutip karakter "lucu" di pemilih jQuery Anda:

$('#input\\[23\\]')

Untuk nilai atribut, Anda dapat menggunakan tanda kutip:

$('input[name="weirdName[23]"]')

Sekarang, saya agak bingung dengan contoh Anda; seperti apa sebenarnya tampilan HTML Anda? Di mana string "inputName" muncul, khususnya?

sunting bogosity tetap; terima kasih @ancrumb


1
Saya tidak dapat memilih (kebetulan pilih tag) <select name="foo[bar]">menggunakan $('select[name=foo\\[bar\\]]')namun saya saya dapat melakukannya dengan menggunakan $('select[name="foo[bar]"]), Anda saran kedua.
Frank Nocke

53

Sintaks pemilih atribut adalah di [name=value]mana namenama atribut dan valueadalah nilai atribut.

Jadi jika Anda ingin memilih semua inputelemen dengan atribut yang namememiliki nilai inputName[]:

$('input[name="inputName[]"]')

Dan jika Anda ingin memeriksa dua atribut (di sini: namedan value):

$('input[name="inputName[]"][value=someValue]')

7

Jika pemilih terkandung dalam variabel, kode di bawah ini mungkin membantu:

selector_name = $this.attr('name');
//selector_name = users[0][first:name]

escaped_selector_name = selector_name.replace(/(:|\.|\[|\])/g,'\\$1');
//escaped_selector_name = users\\[0\\]\\[first\\:name\\]

Dalam hal ini kita awali semua karakter khusus dengan garis miring terbalik ganda.


1
selector.replace (/ ([|]) / g, '\\ $ 1'); bekerja sedikit lebih baik bagi saya karena menambah tebasan yang lolos dan menghasilkan dua, bukan satu tebasan melarikan diri ...
Fydo

@Fydo hanya ingat bahwa Anda juga perlu melarikan diri beberapa karakter lain termasuk titik dua, titik juga
Eric Kigathi

1

Pisahkan saja dengan kutipan berbeda:

<input name="myName[1][data]" value="myValue">

JQuery:

var value = $('input[name="myName[1][data]"]').val();
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.