2012-04-03 43 views
7

Tương đương jQuery của querySelector là gì? Cách duy nhất tôi đã tìm thấy cho đến nay là để chọn tất cả sau đó chọn lựa chọn đầu tiên:jQuery tương đương với querySelector

$(selectorString)[0] 

Với các biểu hiện trên, là jQuery đủ thông minh để ngăn chặn sau khi tìm thấy những trận đấu đầu tiên?

Cập nhật: @Mutnowski đề xuất sử dụng eq() và trước tiên, nhưng sau khi đọc tài liệu jQuery, hai phương pháp đó dường như có cùng nhược điểm: jQuery sẽ nhận được tất cả các kết quả phù hợp, sau đó chỉ lọc phần tử đầu tiên.

+0

lưu ý rằng "eq" không phải là một selector css, đó là một thực hiện jQuery. Vì vậy, để có hiệu suất tốt nhất là tốt hơn viết '$ (" td ") .qq (2)' thay vì '$ (" td: eq (2) ")' – Killy

Trả lời

1

Vì vậy, có vẻ như không có tương đương với querySelector trong jQuery, hoặc tôi n thư viện khác tôi đã xem xét.

Giải pháp thay thế là chọn tất cả các phần tử phù hợp (tương đương với querySelectorAll) rồi lọc ra phần tử đầu tiên. Điều này có thể được thực hiện bằng cách sử dụng [0] (trả về một nút html) hoặc theo gợi ý của @Mutnowski với eq (0) hoặc đầu tiên (trả về một đối tượng jQuery).

6

Bạn muốn .eq (index) để có được một chỉ số

$("td").eq(2) 
$("td:eq(2)") 

http://api.jquery.com/eq/

Nếu bạn muốn chỉ sử dụng đầu tiên .first()

$("tr").first() 
$("tr:first") 

http://api.jquery.com/first/

+0

Thx. Tuy nhiên có vẻ như với tôi rằng jQuery đầu tiên chọn tất cả các trận đấu, và chỉ sau đó áp dụng bộ lọc. Chính xác? – Christophe

+0

@Christophe: Đúng. – BoltClock

0

bạn có thể viết một plugin đơn giản (compatibility notes)

$.fn.firstMatch = function(sel) { 
    var len = this.length; 
    if (!len) return this; 
    for(var i = 0; i < len; i++){ 
     var match = this[i].querySelector(sel); 
     if (match) return $(match); 
    } 
    return $(); 
} 
Các vấn đề liên quan