2011-09-30 27 views
7

Tôi đang sử dụng công cụ chọn này $("textarea #myTextArea").val(text); và nó không hoạt động. Nếu tôi xóa ID và sử dụng lớp, ID đó sẽ hoạt động. Tại sao không phải là jquery có thể tìm thấy các yếu tố ở đây?Cách sử dụng bộ chọn jquery có loại phần tử và ID

+4

FYI, chỉ là id được tối ưu hóa trong jquery - bạn sẽ được làm chậm đáng kể selector –

+0

Daniel là đúng, bạn chỉ nên sử dụng $ ("myTextArea") thay vì chọn của bạn. Nó trực tiếp sử dụng getElementById của javascript() để nó nhanh và hiệu quả. Khi sử dụng bộ chọn của bạn, tập lệnh sẽ chọn tất cả các phần tử (trong trường hợp này là textareas) và lặp qua chúng cho đến khi nó tìm thấy phần tử phù hợp. – Przemek

+0

Có, nhưng tôi không thể làm điều đó vì cùng một ID được sử dụng ở nơi khác, trong cùng một trang, tôi biết điều đó thật khủng khiếp, nhưng tôi phải sống với điều đó. – Manoj

Trả lời

26

Do không gian. Với khoảng trắng, số #myTextArea nằm trong một số textarea.

$("textarea#myTextArea").val(text); 
+1

"văn bản" không chỉ là thừa. Tốc độ chậm hơn khoảng 80%. Ở đây, tôi đã tạo một thử nghiệm: http://jsperf.com/jquery-selector-performance-test123 – Alex

4

Chỉ cần loại bỏ các không gian:

$("textarea#myTextArea").val(text); 

Hiện tại bạn đang cố gắng để chọn một phần tử với ID myTextArea đó là một yếu tố hậu duệ của một textarea

Như Jared Farrish đề cập trong các ý kiến ​​loại bỏ loại phần tử sẽ hiệu quả hơn:

$("#myTextArea").val(text); 

Nếu tài liệu của bạn hợp lệ thì mọi ID sẽ chỉ được sử dụng một lần điều này vẫn đúng.

+0

Hoặc xóa 'textarea' hoàn toàn. –

+3

Để làm rõ cho @Manoj, khi bạn sử dụng một không gian, nó sẽ cố gắng chọn các phần tử với ID myTextArea là * con cháu * của vùng văn bản của bạn. – Kasaku

+0

@PirateKitten +1 Tôi đã chỉnh sửa câu trả lời để phản ánh rằng – Clive

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