2013-07-09 41 views
6

Tôi đang làm việc trên hệ thống cũ sử dụng dấu ngoặc vuông trong thông số id. Ví dụ:Chọn các phần tử có id lạ

<select id="mySelect[]"> 
    <option value="1">Yadda</option> 
    <option value="2">Yadda</option> 
    <option value="3">Yadda</option> 
</select> 

jQuery (là JavaScript) khá đúng phàn nàn khi tôi cố gắng sử dụng id này trong, nói,

$("#mySelect[]").append(options); 

Với thực tế là tôi không thể thay đổi mã di sản và do đó tôi bị mắc kẹt với id hiện tại (có thể hoặc có thể không hợp lệ trong bất kỳ ngữ cảnh nào), điều gì sẽ là một cách hay để làm việc xung quanh mớ hỗn độn này và để tôi chọn các phần tử của mình?

+1

Không một câu trả lời, nhưng bạn luôn có thể sử dụng '$ (document.getElementById ('Bất cứ điều gì-bạn-như'))' và lưu jQuery một số công việc. – Tim

+0

Sẽ thử tất cả các đề xuất bên dưới. Đã đọc tài liệu nhưng quản lý để bỏ lỡ điều này. Lỗi của tôi. +1 tất cả xung quanh. Các bạn đá. –

Trả lời

10

Hãy thử cách này:

$("#mySelect\\[\\]").append(options); 

Bạn cần phải thoát khỏi [] vì chúng được dành riêng chars jquery được sử dụng trong bộ chọn.

Có một cái nhìn tại jquery docs

To use any of the meta-characters (such as !"#$%&'()*+,./:;<=>[email protected][]^`{|}~) as a literal part of a name, it must be escaped with with two backslashes: \. For example, an element with id="foo.bar", can use the selector $("#foo\.bar").

và fiddle here

Thêm ofcourse bạn có thể làm điều này $('[id="mySelect[]"]') Nhưng vì nó là một hiệu suất selector thuộc tính khôn ngoan này sẽ chậm hơn và bạn mất lợi thế của việc sử dụng bộ chọn id, nhưng tiện dụng nếu bạn không có cách nào để thoát khỏi các ký tự.

11

Trong khi sử dụng ký tự meta, bạn phải loại bỏ các ký tự đó.

$("#mySelect\\[\\]").append(options); 

Jquery selector docs saying that

To use any of the meta-characters (such as !"#$%&'()*+,./:;<=>[email protected][]^`{|}~) as a literal part of a name, it must be escaped with with two backslashes: \.

Nếu bạn không muốn để thoát khỏi nó, bạn có thể sử dụng bộ chọn

$(document.getElementById('mySelect[]') 
3

Hãy thử jsfiddle link này.

Cả hai tác phẩm dưới đây tốt:

console.log($('[id^=mySelect]')); 
console.log($('#mySelect\\[\\]')); 
+1

Đầu tiên không phải là một bộ chọn tốt vì nó là bộ chọn thuộc tính và hiệu suất khôn ngoan chậm hơn và không tận dụng lợi thế của bộ chọn id. Đối với vấn đề đó bạn có thể làm '$ ('[id =" mySelect [] "]')' – PSL

+0

@PSL Có bạn đúng, nhưng sẽ là vấn đề khi sử dụng '[id =" mySelect [] "]' nó sẽ không hoạt động trong bộ chọn YUI và có thể trong bộ chọn chrome. –

+0

Nó sẽ hoạt động trong trình duyệt chrome hoặc bất kỳ trình duyệt nào khác, tại sao bạn nghĩ vậy? – PSL

Các vấn đề liên quan