Làm cách nào để chọn tất cả các phần tử có một ID cụ thể trong jQuery?


76

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

Tôi đã thử điều này và nó không hoạt động

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

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

25
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

4
Không phải lúc nào người ta cũng có thể có các ID duy nhất, ít nhất là tôi không thể có đủ khả năng đó. Chà, @mydoghasworms đã [trả lời] [1] câu hỏi khá tốt, chính xác. [1]: stackoverflow.com/questions/902839/…
Fr0zenFyr

Câu trả lời:


38

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>

Điều này cũng có thêm lợi ích là có thể tạo lại các ID dựa trên sự trả về của jQuery ('. Countdown'). Length


Ok việc thêm nhiều lớp vào mỗi đồng hồ đếm ngược. I E:

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

Bằng cách đó bạn sẽ có được những điều tốt nhất của cả hai thế giới. Nó thậm chí còn cho phép lặp lại 'IDS'


Ballasacian: Tôi có n bộ đếm với id 1..n, vì vậy, với mỗi tôi có id = c-1, id = c-2, v.v. 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ả đều có cùng một lớp = 'countdown' thanks
đánh dấu

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

Ballasacian: cảm ơn! điều đó thật tuyệt vời! hoạt độ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!
đánh dấu

1
Điều quan trọng là phải có một câu trả lời đầy đủ giả định các điều kiện tiên quyết hơn là một cách giải quyết. Ngay cả khi bạn nghĩ rằng các điều kiện tiên quyết không phải là tối ưu, chúng thường là một điều kiện nhất định (như viết một tập lệnh Greasemonkey cho một trang web hiện có sử dụng thẻ id theo cách này).
shiggity

Đây không phải là câu trả lời được chấp nhận. Có những trường hợp (ví dụ: tập lệnh Greasemonkey) trong đó một người không có quyền kiểm soát html và chắc chắn có những trang web sử dụng cùng một id nhiều lần.
blues

401

Mặc dù có những câu trả lời đúng khác ở đây (chẳng hạn như sử dụng các lớp), theo quan điểm học thuật, tất nhiên là có thể có nhiều div có cùng ID và có thể chọn chúng bằng jQuery.

Khi bạn sử dụng

jQuery("#elemid") 

nó chỉ chọn phần tử đầu tiên có ID đã cho.

Tuy nhiên, khi bạn chọn theo thuộc tính (ví dụ: id trong trường hợp của bạn), nó trả về tất cả các phần tử phù hợp, như sau:

jQuery("[id=elemid]") 

Tất nhiên, điều này hoạt động để lựa chọn trên bất kỳ thuộc tính nào và bạn có thể tinh chỉnh thêm lựa chọn của mình 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]") 

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

7
Ít nhất ai đó biết cách làm những thứ thực sự trong jQuery ... Chúa ơi! Tôi đã chết khi 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ể áp dụng cách tiếp cận sử dụng lớp của tất cả những người khác, tôi đã có nó ở đó để làm một công việc khác. @Mydoghasworms Hail !!
Fr0zenFyr

3
ĐÂY là câu trả lời chính xác và phải được chấp nhận, +1
Zach

4
Đẹp và đơn giản. Cảm ơn bạn.
James Manes

3
Tôi đã định nói: rất nhiều lời khuyên ở đây nhưng không có câu trả lời. Thay vào đó, may mắn là bạn đã trả lời đúng và tôi nghĩ đây nên là câu trả lời được chấp nhận ngay cả khi cách tiếp cận do @ Ballsacian1 đề xuất là tốt để tránh vấn đề.
gigaDIE

35

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

Từ tiêu chuẩn HTML :

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

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


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

1
Về bài viết này: Điều thú vị đủ, có một chức năng 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 nguyê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 yếu tố giống nhau id, không phải name.
Ayman Hourieh

2
@Jimbo - vâng, các nhóm radio phụ thuộc vào tính năng. Không phải tất cả các phần tử đều có thể có tên. Câu hỏi đề cập đến div và chúng không có thuộc tính name.
Quentin

4

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

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

4

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


2

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


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

1
Lớp HTML . Mọi người hầu như chỉ sử dụng các lớp để so khớp các bộ chọn CSS không làm cho chúng trở thành một phần của một ngôn ngữ khác.
Quentin

0

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

Của bạn đây:

<div id="wraper1">
<div id="div1">
</div>
<div id="wraper2">
<div id="div1">
</div>
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.