2010-03-09 25 views

Trả lời

117

Bạn có thể so sánh các phần tử DOM. Hãy nhớ rằng các bộ chọn jQuery trả về các mảng sẽ không bao giờ bằng nhau theo nghĩa bình đẳng tham chiếu.

Giả sử:

<div id="a" class="a"></div> 

này:

$('div.a')[0] == $('div#a')[0] 

trả về true.

+0

Có bạn đã thử nghiệm này? Tôi khá chắc chắn nó sẽ không trở lại đúng vì sự khác biệt trong thuộc tính '.selector'. –

+3

Có, tôi đã thử nghiệm mã này trên IE6, FF 3.6 và Chrome 4. Nó trả về 'true' trên tất cả các trình duyệt này. –

+5

Xem nhận xét bên dưới bằng @ R-U-Bn. Sau đây là mẹo: a.is (b) – JCallico

-1

quả Bộ sưu tập bạn trở lại từ một bộ sưu tập jQuery không hỗ trợ so sánh bộ dựa trên. Bạn có thể sử dụng so sánh từng thành viên một, mặc dù không có tiện ích nào cho điều này mà tôi biết trong jQuery.

2

Random AirCoded ví dụ về thử nghiệm "thiết lập sự bình đẳng" trong jQuery:

$.fn.isEqual = function($otherSet) { 
    if (this === $otherSet) return true; 
    if (this.length != $otherSet.length) return false; 
    var ret = true; 
    this.each(function(idx) { 
    if (this !== $otherSet[idx]) { 
     ret = false; return false; 
    } 
    }); 
    return ret; 
}; 

var a=$('#start > div:last-child'); 
var b=$('#start > div.live')[0]; 

console.log($(b).isEqual(a)); 
9

Mỗi lần bạn gọi jQuery() chức năng, một đối tượng mới được tạo ra và trả lại. Vì vậy, ngay cả kiểm tra bình đẳng trên cùng một bộ chọn sẽ thất bại.

<div id="a">test</div> 

$('#a') == $('#a') // false 

Kết quả là đối tượng jQuery chứa một loạt các yếu tố phù hợp, đó là cơ bản đối tượng DOM bản địa như HTMLDivElement rằng luôn luôn đề cập đến cùng một đối tượng, vì vậy bạn nên kiểm tra những sự bình đẳng bằng cách sử dụng chỉ số mảng như Darin gợi ý.

$('#a')[0] == $('#a')[0] // true 
293

Đối với hồ sơ, jQuery có chức năng is() cho việc này:

a.is(b) 

Lưu ý rằng a đã là một trường hợp jQuery.

+2

Nó hoạt động tốt! –

+0

Phương pháp này cũng có lợi thế là làm việc trong đó giải pháp "==" không: '$ (event.target) .is ($ (" # a "))' – Tyson

+1

@DanielS Tôi không nghĩ rằng bạn đã thêm 2 "$ (..) "được yêu cầu ở đây, vì trong câu hỏi a và b là các trường hợp jquery. Tôi cũng chỉ đề cập đến nó cho những người khác có thể nghĩ rằng bạn phải tăng gấp đôi tải. –

3
a.is(b) 

và để kiểm tra nếu họ không sử dụng bằng

!a.is(b) 

như đối với

$b = $('#a') 
.... 
$('#a')[0] == $b[0] // not always true 

thể lớp thêm vào nguyên tố hoặc ra khỏi nó sau khi chuyển nhượng đầu tiên

+0

a.không (b) không phải là nghịch đảo của a.is (b) thay vì nó loại bỏ các phần tử b khỏi a. Thay vì sử dụng! A.is (b) –

+0

Có, bạn đã đúng! – Jondi