Mục đích của dấu hai chấm ở đầu trong bộ chọn jQuery là gì?


84

Tôi đã bắt đầu sử dụng bộ công cụ Wijmo và đã xem qua một số bộ chọn ví dụ tương tự như bộ này trong các trang tài liệu của họ:

$(":input[type='radio']").wijradio();

Tôi đã viết của tôi như thế này:

$('input[type=radio]').wijradio();

Những điều này có giống nhau không hay có điều gì đó tôi đang thiếu?

Lưu ý rằng có hai điểm khác biệt ở trên: bộ chọn đầu tiên có tiền tố là dấu hai chấm và có dấu ngoặc kép cho kiểu đầu vào.


4
Một là :inputbộ chọn chuyên biệt , trong khi bộ kia là Elementbộ chọn chung .
mellamokb

Câu trả lời:


85

:inputlà một phần mở rộng jQuery trong khi inputlà một bộ chọn CSS.

textarea, buttonselectcác phần tử sẽ được so khớp với cái trước, nhưng không phải phần sau.

Cái sau nhanh hơn, vì vậy hãy sử dụng nó cho radioví dụ cụ thể của bạn . Sử dụng :inputkhi bạn muốn "tất cả các phần tử biểu mẫu" ngay cả khi chúng không phải là <input>thẻ chính xác. Ngay cả trong trường hợp đó, khuyến nghị là sử dụng bộ chọn CSS tiêu chuẩn trước, sau đó sử dụng .filter(':input')trên bộ đó.

Bởi vì: input là một phần mở rộng của jQuery và không phải là một phần của đặc tả CSS, các truy vấn sử dụng: input không thể tận dụng hiệu suất tăng hiệu suất được cung cấp bởi phương thức DOM querySelectorAll (). Để đạt được hiệu suất tốt nhất khi sử dụng: input để chọn phần tử, trước tiên hãy chọn phần tử bằng bộ chọn CSS thuần túy, sau đó sử dụng .filter (": input").

Trong nguồn 1.7.2,: bộ lọc đầu vào kiểm tra một biểu thức chính quy đối với nodeName:

input: function( elem ) {
            return (/input|select|textarea|button/i).test( elem.nodeName );
},

Điều đó có ý nghĩa, cảm ơn! Và các loại dấu ngoặc kép là hoàn toàn tùy chọn?
Morten Mertner

1
Thành thật mà nói, tôi chưa bao giờ sử dụng [type=]với :inputbởi vì nếu tôi đang tìm kiếm một loại cụ thể, sử dụng :inputđể có được tất cả chúng trước tiên có vẻ là một chặng đường dài. Đối với các bộ chọn CSS thuần túy, tôi hiểu rằng các dấu ngoặc kép là tiêu chuẩn, nhưng các trình duyệt thì tha thứ. Bạn có thể nhanh chóng kiểm tra nó với / không có tại đây tham
chiếu.sitepoint.com/css/css3attributeselectors/demo

vì vậy $ (": đã kiểm tra") đưa ra các hộp kiểm .. đây cũng là phần mở rộng jquery?
Vishal Sharma

@David Ruttka: "trình duyệt có thể tha thứ" chỉ áp dụng cho HTML và CSS ở chế độ kỳ quặc. Tuyên bố đó không áp dụng cho CSS ở chế độ tiêu chuẩn. Trích dẫn có thể được bỏ qua một cách hợp pháp trong một số trường hợp.
BoltClock

chúng ta có thể có một ví dụ về first select the elements using a pure CSS selector, then use .filter(":input").?
Poutrathor

17

các $("input")selector sẽ chọn duy nhất các yếu tố của các loại đầu vào

trong khi $(":input")bộ chọn sẽ bắt tất cả các yếu tố đầu vào (chẳng hạn như textarea, select, input, v.v.)

để biết thêm thông tin, hãy truy cập tài liệu chính thức của jQuery về :inputbộ chọn tại:

http://api.jquery.com/input-selector/


6

Bộ :inputchọn về cơ bản chọn tất cả các formđiều khiển (đầu vào, vùng văn bản, lựa chọn và các phần tử nút) trong đó inputbộ chọn chọn tất cả các phần tử theo tên thẻ input.

Vì nút radio là một formphần tử và nó cũng sử dụng inputthẻ nên cả hai đều có thể được sử dụng để chọn nút radio. Tuy nhiên, cả hai cách tiếp cận đều khác nhau về cách chúng tìm ra các yếu tố và do đó mỗi cách đều có những lợi ích về hiệu suất khác nhau.

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.