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).

bantu
sumber

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"]')
Dancrumb
sumber
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

Runcing
sumber
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]')
Gumbo
sumber
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.

Eric Kigathi
sumber
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();
slva2000
sumber