ทดสอบว่าสององค์ประกอบเหมือนกันหรือไม่


87

ฉันสงสัยว่าจะได้ผลในตอนแรก:

if ($('#element') == $('#element')) alert('hello');

แต่มันไม่ได้ จะทดสอบได้อย่างไรว่าองค์ประกอบเหมือนกันหรือไม่?

คำตอบ:


139

จาก jquery 1.6 ตอนนี้คุณสามารถทำได้:

$element1.is($element2)

7
นี่คือคำตอบที่ดีที่สุดสำหรับ Jquery เวอร์ชันล่าสุดทั้งหมด
Chris Jaynes

อีกคนหนึ่งที่ฉันหวังว่าฉันจะโหวตให้คะแนนทุกครั้งที่ฉันจบ Googling คำถามเดียวกันและพบคำตอบนี้
freefaller

75

สิ่งนี้ควรใช้งานได้:

if ($(this)[0] === $(this)[0]) alert('hello');

ควรเป็นเช่นนี้

if (openActivity[0] == $(this)[0]) alert('hello');

3
ตัวอย่างที่สองของคุณไม่ควรเป็น === และไม่ใช่ == เพื่อสะท้อนตัวอย่างแรกของคุณอย่างถูกต้อง
Prusprus

3
คำตอบนี้อาจถูกต้องใน jquery เวอร์ชันเก่า แต่คนส่วนใหญ่อาจใช้เวอร์ชันที่รองรับ$.is
Chris Jaynes


12

อย่างที่ใครบางคนบอกไปแล้วองค์ประกอบ HTML เดียวกันที่รวมอยู่ในช่วงเวลาสองช่วงเวลาที่แตกต่างกันทำให้เกิดอินสแตนซ์ jQuery สองอินสแตนซ์ที่แตกต่างกันดังนั้นจึงไม่สามารถเท่ากันได้

องค์ประกอบ HTML ที่รวมอยู่อาจถูกเปรียบเทียบในลักษณะนั้นแทนเนื่องจากตำแหน่งหน่วยความจำที่พวกเขาครอบครองนั้นเหมือนกันหากเป็นองค์ประกอบ HTML เดียวกันดังนั้น:

var LIs = $('#myUL LI');
var $match = $('#myUL').find('LI:first');

alert(LIs.eq(0) === $match); // false
alert(LIs.get(0) === $match.get(0)) // TRUE! yeah :)

ขอแสดงความนับถืออย่างสูง!


5

ฉันจะใช้ addClass () เพื่อทำเครื่องหมายเปิดและคุณสามารถตรวจสอบได้อย่างง่ายดาย


3

9 ปีต่อมาโดยไม่มี jQuery

ถ้าสององค์ประกอบเหมือนกันสององค์ประกอบจะต้องมีตัวชี้เดียวกัน ด้วยประการฉะนี้

document.body === document.body // true
document.querySelector('div') === document.querySelector('div') // true
document.createElement('div') === document.createElement('div') // false

0

เช่นเดียวกับที่เนียนหรือสันติกล่าวว่า ID หรือคลาสเฉพาะจะเป็นวิธีที่ง่ายที่สุดในการทดสอบ สาเหตุที่คำสั่ง if ของคุณไม่ได้ผลอย่างที่คุณคาดหวังเพราะมันเปรียบเทียบวัตถุ 2 ชิ้นและดูว่ามันเป็นวัตถุเดียวกันในหน่วยความจำหรือไม่

เนื่องจากเป็นวัตถุใหม่ที่สร้างขึ้นโดย $ (this) เสมอจึงไม่สามารถเท่ากันได้ นั่นเป็นเหตุผลที่คุณต้องทดสอบคุณสมบัติของวัตถุ คุณสามารถออกไปโดยไม่มี id / class ที่ไม่ซ้ำกันหากแต่ละองค์ประกอบ openActivity ได้รับการรับรองว่ามีเนื้อหาที่แตกต่างกันซึ่งคุณสามารถทดสอบได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.