jquery, bộ chọn cho lớp trong id


91

Dưới đây, làm cách nào để chọn các phần tử có chứa lớp my_classtrong phần tử với id = "my_id"?

Lưu ý rằng phần tử cũng có thể có một lớp khác mà tôi không chọn.

<div id = "my_id">
    <span class = "my_class hidden">hi</span>
    <span class = "my_class">hello</span>
</div>

đã cố gắng

$("#my_id [class*=my_class ]")

Câu trả lời:


150

Bạn có thể sử dụng bộ chọn lớp cùng với bộ chọn con cháu

$("#my_id .my_class")

Tôi có thể kết hợp cái này với: first (để lấy phần tử đầu tiên của lớp đó bên trong #my_id) không?
jakob.j

1
@ jakob.j$("#my_id .my_class:first")
Arun P Johny

Tôi có thể sử dụng tương tự cho lớp ngoài id như $ (". My_class #my_id") khi id được xác định bên trong lớp không
dhS 29/11/16

48

Chỉ cần sử dụng bộ chọn lớp đơn giản.

$('#my_id .my_class')

Không quan trọng nếu phần tử cũng có các lớp khác. Nó có lớp .my_class và nó ở đâu đó bên trong #my_id , vì vậy nó sẽ khớp với bộ chọn đó.

Về hiệu suất

Theo tài liệu về hiệu suất của bộ chọn jQuery , sẽ nhanh hơn nếu sử dụng riêng hai bộ chọn, như sau:

$('#my_id').find('.my_class')

Đây là phần liên quan của tài liệu:

Bộ chọn dựa trên ID

// Fast:
$( "#container div.robotarm" );

// Super-fast:
$( "#container" ).find( "div.robotarm" );

Cách .find()tiếp cận này nhanh hơn vì lựa chọn đầu tiên được xử lý mà không cần thông qua công cụ chọn Sizzle - các lựa chọn chỉ dành cho ID được xử lý bằng cách sử dụng document.getElementById(), điều này cực kỳ nhanh vì nó có nguồn gốc từ trình duyệt.

Việc chọn theo ID hoặc chỉ theo lớp (trong số những thứ khác) sẽ gọi các chức năng do trình duyệt cung cấp như document.getElementById()là khá nhanh, trong khi sử dụng bộ chọn con sẽ gọi công cụ Sizzle như đã đề cập, mặc dù nhanh nhưng chậm hơn so với phương án thay thế được đề xuất.



1

Tôi nghĩ rằng yêu cầu của bạn chỉ chọn <span class = "my_class">hello</span>phần tử này, Bạn phải làm như thế này, Nếu tôi hiểu câu hỏi của bạn một cách chính xác thì đây là câu trả lời,

$("#my_id [class='my_class']").addClass('test');

DEMO


$("#my_id .my_class")là tương đương ngắn hơn; bạn không thu được gì từ việc sử dụng công cụ chọn thuộc tính trong trường hợp này.
doppelgreener

Tôi hy vọng điều đó cũng thực hiện công việc tương tự như câu trả lời của bạn, trong khi tôi đang trả lời câu hỏi bạn đã trả lời, tôi không nhận thấy rằng kể từ khi tôi thực hiện câu trả lời, tôi đã không xóa câu hỏi.
Thirumalai killugan

1

Cũng $( "#container" ).find( "div.robotarm" );
bằng:$( "div.robotarm", "#container" )

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.