2010-09-06 2 views
44

Không có vấn đề gì khi tìm một yếu tố theo vị trí và vị trí của một phần tử trong Javascript. Nhưng có cách nào chung để so sánh chúng?Có cách nào để kiểm tra xem hai phần tử DOM có bằng nhau hay không?

Cách duy nhất tôi có thể nghĩ là so sánh id hoặc tên lớp, nhưng không phải tất cả các phần tử đều có id hoặc tên lớp.

+1

"Bằng" có ý nghĩa gì trong ngữ cảnh của bạn, sau đó, nếu không phải là cùng một id? Có cùng loại phần tử không? Hoặc cùng một nội dung? Hãy mở rộng câu hỏi của bạn một chút ... – peirix

+1

So sánh những gì về chúng? Chiều cao, màu nền, chỉ mục z? Bạn đang tìm gì để so sánh. – Robert

+0

Ý bạn là "bình đẳng"? Bạn có nghĩa là khi hai biến trỏ đến cùng một yếu tố? Hoặc bạn có nghĩa là hai yếu tố "trông giống nhau". Nếu vậy, sau đó bạn cần phải xác định ý nghĩa của nó để "trông giống nhau": thực hiện cùng số lượng vị trí xy, có cùng độ trong suốt/độ mờ đục, cùng nội dung văn bản không? – slebetman

Trả lời

38

Nếu bạn muốn so sánh hai phần tử con trỏ cho cùng một yếu tố, chỉ cần sử dụng toán tử so sánh. Điều này có thể dễ dàng chứng minh vì

document.body === document.body 

Ví dụ, nếu tôi bằng cách nào đó đã đề cập đến hai yếu tố tôi không biết:

if (element1 === element2) ... 
+0

Cảm ơn bạn đã đề xuất! –

+0

@ www139 - tại sao đề xuất? vui lòng cung cấp bằng chứng – vsync

+0

@vsync xem xét câu hỏi này http://stackoverflow.com/questions/359494/does-it-matter-which-equals-operator-vs-i-use-in-javascript-comparisons và http: //stackoverflow.com/questions/10679762/how-to-compare-two-html-elements – www139

30

Trong trình duyệt hiện đại có hai phương pháp để so sánh các nút.

var a = document.createElement('div'); 
var b = document.createElement('div'); 
b.isEqualNode(a); // true 

nhưng

b.isSameNode(a); //false 

Và như đối với IE, nó là yếu tố DOM có thuộc tính không stanard, uniqueID. Nhưng tôi không thể tưởng tượng nó có thể hữu ích trong trường hợp này, vì có, bạn thực sự có thể so sánh hai con trỏ.

+12

MDN lời khuyên này được khấu hao và sử dụng == hoặc === như trong câu trả lời của Delan. https://developer.mozilla.org/en-US/docs/DOM/Node.isSameNode – Andru

+0

@Andru, oh, mọi thứ thay đổi khá nhanh trong những năm gần đây :))) – shabunc

+2

chức năng 'isSameNode' không được chấp nhận, bạn nên sử dụng' isEqualNode' để thay thế. Xem https://developer.mozilla.org/en-US/docs/Web/API/Node.isSameNode – idFlood