ตัวเลือก jQuery สำหรับอินพุตที่มีวงเล็บเหลี่ยมในแอตทริบิวต์ name


180

ฉันกำลังพยายามเลือกองค์ประกอบนี้ซึ่งมีวงเล็บเหลี่ยมในแอตทริบิวต์ชื่อ:

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

ฉันลองสิ่งนี้ (ซึ่งใช้งานไม่ได้):

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

และไม่ทำสิ่งนี้:

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

หรือสิ่งนี้:

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

แก้ไข:ตามที่คุณบางคนชี้ให้เห็น$('input[inputName=someValue]')จะไม่ทำงาน สิ่งที่ฉันพยายามทำคือ$('input[name=inputName][value=someValue]'). (แต่มี[]ในแอตทริบิวต์ชื่อ)

คำตอบ:


263

ตามเอกสาร jQueryให้ลองสิ่งนี้:

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

[แก้ไข] อย่างไรก็ตามฉันไม่แน่ใจว่าเป็นไวยากรณ์ที่ถูกต้องสำหรับตัวเลือกของคุณ คุณอาจต้องการ:

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

32
จับดี. เหตุผลที่ต้องการแบ็กสแลชสองรายการเนื่องจากแบ็กสแลชเดี่ยวถูกตีความว่าเป็นอักขระสตริงยกเว้น JavaScript ดังนั้นคุณต้องมีสองในการระบุแบ็กสแลชตามตัวอักษรซึ่งจัดเตรียมอักขระ escape ให้กับตัวเลือก ... การหลบหนี
Peter

ขอบคุณสำหรับสิ่งนั้น. มันเป็นเพียงเรื่องของการใช้การแสดงออกปกติ สิ่งนี้มีประโยชน์มากเมื่อส่งข้อมูลแบบฟอร์มโดยตรงไปยังอาร์เรย์หรือรายการภายในกรอบงานมุมมองที่คุณชื่นชอบ นอกจากนี้ยังช่วยฉันตอบคำถามเกี่ยวกับการลบวัตถุที่มีองค์ประกอบหลักหลายรายการ ;)
Luiz Feijão Veronesi

79

คุณสามารถใช้เครื่องหมายแบคสแลชเพื่อพูดอักขระ "ตลก" ในตัวเลือก jQuery ของคุณ:

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

สำหรับค่าคุณลักษณะคุณสามารถใช้เครื่องหมายคำพูด:

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

ตอนนี้ฉันสับสนตัวอย่างของคุณเล็กน้อย HTML ของคุณมีลักษณะอย่างไร สตริง "inputName" ปรากฏที่ใดโดยเฉพาะ

แก้ไขความไม่แน่นอนคงที่; ขอบคุณ @Dancrumb


1
ผมไม่สามารถที่จะเลือก (โดยบังเอิญเลือกแท็ก) <select name="foo[bar]">ใช้$('select[name=foo\\[bar\\]]')แต่ฉันฉันสามารถที่จะทำได้โดยใช้$('select[name="foo[bar]"])คุณข้อเสนอแนะที่สอง
Frank Nocke

53

ไวยากรณ์ตัวเลือกแอททริบิวต์คือ[name=value]ตำแหน่งที่nameเป็นชื่อของแอททริบิวต์และvalueเป็นค่าแอททริบิวต์

ดังนั้นหากคุณต้องการเลือกinputองค์ประกอบทั้งหมดที่มีแอตทริบิวต์ที่nameมีค่าinputName[]:

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

และถ้าคุณต้องการตรวจสอบสองคุณสมบัติ (ที่นี่: nameและvalue):

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

7

หากตัวเลือกอยู่ในตัวแปรรหัสด้านล่างอาจมีประโยชน์:

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

ในกรณีนี้เรานำหน้าอักขระพิเศษทั้งหมดด้วยแบ็กสแลชคู่


1
selector.replace (/ ([|]) / g '\\\\ $ 1'); ทำงานได้ดีขึ้นเล็กน้อยสำหรับฉันเพราะมันเพิ่มเครื่องหมายสแลชต์ที่หลบหนีและสร้างสแลชสองอันไม่ใช่หนึ่งสแลชที่รอดพ้นได้ ...
Fydo

@Fydo เพียงจำไว้ว่าคุณยังต้องหลบหนีจากตัวละครอื่น ๆ รวมถึงโคลอนช่วงเวลาด้วย
Eric Kigathi

1

เพียงแค่แยกด้วยเครื่องหมายคำพูดอื่น:

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

JQuery:

var value = $('input[name="myName[1][data]"]').val();
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.