Bộ chọn jQuery cho các đầu vào có dấu ngoặc vuông trong thuộc tính name


179

Tôi đang cố gắng chọn phần tử này có dấu ngoặc vuông trong thuộc tính name:

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

Tôi đã thử cách này (không hoạt động):

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

và cũng không làm điều này:

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

hoặc này:

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

EDIT: Như một số bạn đã chỉ ra, $('input[inputName=someValue]')sẽ không bao giờ hoạt động. Những gì tôi đã cố gắng làm là : $('input[name=inputName][value=someValue]'). (Nhưng với []thuộc tính tên).

Câu trả lời:


262

Theo tài liệu jQuery , hãy thử điều này:

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

[EDIT] Tuy nhiên, tôi không chắc đó là cú pháp phù hợp cho bộ chọn của bạn. Bạn có thể muốn:

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

32
Nắm bắt tốt. Lý do cần hai dấu gạch chéo ngược là vì một dấu gạch chéo ngược đơn được hiểu là ký tự thoát chuỗi JavaScript, vì vậy bạn cần hai ký tự dấu gạch chéo ngược, cung cấp ký tự thoát cho bộ chọn ... ah, niềm vui của nhiều cấp độ ký tự trốn thoát.
Peter

Cảm ơn vì điều đó. Nó chỉ là một vấn đề của việc sử dụng các biểu thức thông thường. Điều này rất hữu ích khi gửi dữ liệu biểu mẫu trực tiếp đến một mảng hoặc danh sách trong khung xem ưa thích của bạn. Điều đó cũng giúp tôi trả lời câu hỏi về việc xóa các đối tượng có nhiều yếu tố chính. ;)
Luiz Feijão Veronesi

79

Bạn có thể sử dụng dấu gạch chéo ngược để trích dẫn các ký tự "hài hước" trong bộ chọn jQuery của mình:

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

Đối với các giá trị thuộc tính, bạn có thể sử dụng dấu ngoặc kép:

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

Bây giờ, tôi có một chút bối rối bởi ví dụ của bạn; Chính xác thì HTML của bạn trông như thế nào? Cụ thể, chuỗi "inputName" hiển thị ở đâu?

chỉnh sửa cố định; cảm ơn @Dancrumb


1
Tôi không thể chọn (tình cờ một chọn thẻ) <select name="foo[bar]">sử dụng $('select[name=foo\\[bar\\]]')tuy nhiên tôi có khả năng làm như vậy sử dụng $('select[name="foo[bar]"]), bạn có gợi ý thứ hai.
Frank Nocke

53

Cú pháp selector thuộc tính là [name=value]nơi namelà tên thuộc tính và valuelà giá trị thuộc tính.

Vì vậy, nếu bạn muốn chọn tất cả các inputthành phần có thuộc tính namecó giá trị inputName[]:

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

Và nếu bạn muốn kiểm tra hai thuộc tính (ở đây: namevalue):

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

7

Nếu bộ chọn được chứa trong một biến, mã bên dưới có thể hữu ích:

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

Trong trường hợp này, chúng tôi tiền tố tất cả các ký tự đặc biệt với dấu gạch chéo kép.


1
selector.replace (/ ([|]) / g, '\\\\ $ 1'); làm việc tốt hơn một chút đối với tôi vì nó thêm các dấu gạch chéo đã thoát và tạo ra hai, không phải một dấu gạch chéo thoát ...
Fydo

@Fydo chỉ cần nhớ rằng bạn cũng cần phải thoát khỏi một số nhân vật khác bao gồm cả dấu hai chấm, thời gian là tốt
Eric Kigathi

1

Chỉ cần tách nó với các trích dẫn khác nhau:

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

JQuery:

var value = $('input[name="myName[1][data]"]').val();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.