name özniteliğinde köşeli parantez içeren girişler için jQuery seçici


180

Name özniteliğinde köşeli parantez olan bu öğeyi seçmeye çalışıyorum:

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

Bunu denedim (işe yaramaz):

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

ve bunu da yapmaz:

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

veya bu:

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

EDIT: Bazılarınızın işaret ettiği gibi, $('input[inputName=someValue]')asla işe yaramaz. Ne Yapmaya çalıştığım oldu: $('input[name=inputName][value=someValue]'). (Ancak []name özniteliğinde).

Yanıtlar:


263

Başına jQuery belgelerine , bu deneyin:

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

[EDIT] Ancak, bunun seçiciniz için doğru sözdiziminden emin değilim. Muhtemelen siz istersiniz:

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

32
İyi yakalama. İki ters eğik çizgiye ihtiyaç duymanın nedeni, tek bir ters eğik çizginin bir JavaScript dizesi kaçış karakteri olarak yorumlanmasıdır, bu nedenle seçiciye kaçış karakteri sağlayan değişmez bir ters eğik çizgi belirtmek için ikiye ihtiyacınız vardır ... ah, birden çok karakter seviyesinin sevinçleri kaçan.
Peter

Bunun için teşekkür ederim. Bu sadece düzenli ifadeler kullanma meselesidir. Bu, form verilerini doğrudan favori görünüm çerçevenizdeki bir diziye veya listeye gönderirken çok kullanışlıdır. Bu, birden çok birincil anahtar öğesine sahip nesneleri silme hakkındaki soruyu yanıtlamama da yardımcı oldu. ;)
Luiz Feijão Veronesi

79

JQuery seçicilerinizde "komik" karakterler belirtmek için ters eğik çizgi kullanabilirsiniz:

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

Özellik değerleri için tırnak işaretleri kullanabilirsiniz:

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

Şimdi, senin örneğinle biraz kafam karıştı; HTML'niz tam olarak neye benziyor? Özellikle "inputName" dizesi nerede görünür?

düzenlemek fixed bogosity; teşekkürler @Dancrumb


1
Ben (tesadüfen seçilmiş bir etiketi) seçmek mümkün değilim <select name="foo[bar]">kullanarak $('select[name=foo\\[bar\\]]')ben ancak ben kullanarak bunu yapmak mümkün $('select[name="foo[bar]"]), ikinci öneri.
Frank Nocke

53

Özellik seçici sözdizimi [name=value]nerede nameözellik adı ve valueözellik değeridir.

Dolayısıyla , değere sahip inputözelliğe namesahip tüm öğeleri seçmek istiyorsanız inputName[]:

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

Ve iki özelliği kontrol etmek istiyorsanız (burada: nameve value):

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

7

Seçici bir değişkenin içindeyse, aşağıdaki kod yardımcı olabilir:

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\\]

Bu durumda, tüm özel karakterlere çift ters eğik çizgi ekleriz.


1
selector.replace (/ ([|]) / gr '\\\\ $ 1'); benim için biraz daha iyi çalıştı çünkü kaçan eğik çizgileri ekler ve bir kaçış eğik çizgi değil iki üretir ...
Fydo

@Fydo, iki nokta üst üste, nokta da dahil olmak üzere diğer bazı karakterlerden de kaçmanız gerektiğini unutmayın
Eric Kigathi

1

Sadece farklı alıntılarla ayırın:

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

JQuery:

var value = $('input[name="myName[1][data]"]').val();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.