2009-05-24 32 views
62

Tôi đang cố gắng chọn tất cả <div> s có cùng ID trong jQuery. Tôi phải làm nó như thế nào?Cách chọn tất cả các phần tử có ID cụ thể trong jQuery?

tôi đã cố gắng này và nó đã không làm việc

jQuery('#xx').each(function(ind,obj){ 
     //do stuff; 
}); 
+17

ID có nghĩa là duy nhất. Sử dụng các lớp học. –

+22

Mọi người đều biết rằng, không ai ở đây trả lời câu hỏi của anh ấy. – Sid

+3

Không phải lúc nào cũng có thể có ID duy nhất, ít nhất tôi không thể đủ khả năng đó. Vâng, @mydoghasworms có [trả lời] [1] câu hỏi khá tốt, đến mức. [1]: http://stackoverflow.com/questions/902839/jquery-select-divs-with-same-id#answer-6744674 – Fr0zenFyr

Trả lời

36

Tôi sẽ sử dụng các ID khác nhau nhưng chỉ định mỗi DIV cùng một lớp.

<div id="c-1" class="countdown"></div> 
<div id="c-2" class="countdown"></div> 

này cũng có thêm lợi ích của việc có thể để tái tạo lại các ID dựa tắt của sự trở lại của jQuery ('đếm ngược'). Chiều dài


Ok gì về việc thêm nhiều lớp với nhau đồng hồ đếm ngược. IE:

<div class="countdown c-1"></div> 
<div class="countdown c-2"></div> 
<div class="countdown c-1"></div> 

Bằng cách đó bạn tận dụng tối đa cả hai thế giới. Nó thậm chí còn cho phép lặp lại 'IDS'

+0

Ballasacian: tôi có n quầy với id 1..n, vì vậy đối với mỗi i có id = c-1, id = c-2 vv nhưng một số trong số này lặp lại. vì vậy tôi không thể sử dụng phương pháp của bạn. và tất cả họ đều có cùng một lớp = 'đếm ngược' cảm ơn – mark

+0

Tại sao bạn muốn nó lặp lại? Đặc biệt là trên một ID mà phải là duy nhất. – Ballsacian1

+0

Ballasacian: cảm ơn! thật tuyệt vời! hoạt động giống như cách tôi muốn !! không biết tại sao tôi không nghĩ về điều đó trước đây! – mark

36

Tài liệu của bạn không nên chứa hai divs với cùng id. Đây là invalid HTML và do đó, API DOM cơ bản không hỗ trợ nó.

Từ HTML standard:

id = tên [CS] Thuộc tính này gán đặt tên cho một phần tử. Tên này phải là là duy nhất trong tài liệu.

Bạn có thể chỉ định các id khác nhau cho mỗi div và chọn cả hai sử dụng $('#id1, #id2). Hoặc chỉ định cùng một lớp cho cả hai phần tử (ví dụ: .cls) và sử dụng $('.cls') để chọn cả hai phần tử đó.

+1

Cũng cần lưu ý rằng hầu hết các hàm getElementById() cơ bản jQuery và các thư viện khác kết thúc cuộc gọi để thực hiện tìm kiếm thực sự từ chối trả lại bất kỳ điều gì, nhưng phần tử đầu tiên (hoặc ngẫu nhiên?) khớp với một ID đã cho và hỗ trợ nó có nghĩa là sẽ tự đi bộ DOM. Chỉ cần không đáng để đánh dấu không hợp lệ! – ironfroggy

+0

Về bài đăng này: Điều thú vị là có một hàm javascript getElementsByName (xxx) - thông báo số nhiều - ngụ ý rằng nó là hoàn toàn hợp pháp để có nhiều hơn một phần tử có cùng tên ... – Jimbo

+1

@Jimbo - Đúng nhưng câu trả lời của tôi là về các phần tử có cùng 'id', không phải' tên'. –

2

Bạn có thể chỉ định một lớp CSS duy nhất cho mỗi bộ hẹn giờ riêng biệt không? Bằng cách đó bạn có thể sử dụng bộ chọn cho lớp CSS, điều này sẽ hoạt động tốt với nhiều phần tử div.

+0

paul, không i cant sử dụng một lớp duy nhất cho mỗi bộ đếm thời gian, bởi vì tôi sử dụng lớp để chọn tất cả bộ hẹn giờ, để khởi tạo và tạo kiểu đồng hồ đếm ngược. – mark

+1

** HTML ** lớp. Mọi người sử dụng các lớp học gần như dành riêng cho các bộ chọn CSS phù hợp không làm cho chúng trở thành một phần của một ngôn ngữ khác. – Quentin

1

Bạn cũng có thể thử gói hai div trong hai div với id duy nhất. Sau đó chọn div bởi $("#div1","#wraper1")$("#div1","#wraper2")

Ở đây bạn đi:

<div id="wraper1"> 
<div id="div1"> 
</div> 
<div id="wraper2"> 
<div id="div1"> 
</div> 
371

Mặc dù có câu trả lời đúng khác ở đây (ví dụ như sử dụng các lớp học), từ một điểm học tập của xem nó là tất nhiên có thể có nhiều div với cùng một ID và có thể chọn chúng với jQuery.

Khi bạn sử dụng

jQuery("#elemid") 

nó chọn chỉ phần tử đầu tiên với ID nhất định.

Tuy nhiên, khi bạn chọn bởi thuộc tính (ví dụ id trong trường hợp của bạn), nó sẽ trả về tất cả các yếu tố phù hợp, như vậy:

jQuery("[id=elemid]") 

Điều này tất nhiên làm việc cho lựa chọn trên bất kỳ thuộc tính, và bạn có thể tinh chỉnh thêm lựa chọn của bạn bằng cách chỉ định thẻ được đề cập (ví dụ:div trong trường hợp của bạn)

jQuery("div[id=elemid]") 
+119

Bạn là người duy nhất trả lời câu hỏi. – wcm

+15

Đây là câu trả lời đúng. – d512

+6

Ít nhất ai đó biết cách làm những thứ thực tế trong jQuery ... Gosh! Tôi đã chết để biết điều này, không có gì khác hoạt động. Tôi chỉ đơn giản là không thể tiếp cận tất cả những người khác bằng cách sử dụng lớp học, tôi đã có nó ở đó để làm một công việc khác. Mưa đá @mydoghasworms !! – Fr0zenFyr

2

Hãy thử điều này để lựa chọn div id đầu tiên

$('div[id^="c-"]') 
4

$("div[id^=" + controlid + "]") sẽ trả lại tất cả các điều khiển có cùng tên nhưng bạn cần phải đảm bảo rằng các văn bản không nên có mặt trong bất kỳ điều khiển nào

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