ฉันสงสัยว่าจะได้ผลในตอนแรก:
if ($('#element') == $('#element')) alert('hello');
แต่มันไม่ได้ จะทดสอบได้อย่างไรว่าองค์ประกอบเหมือนกันหรือไม่?
ฉันสงสัยว่าจะได้ผลในตอนแรก:
if ($('#element') == $('#element')) alert('hello');
แต่มันไม่ได้ จะทดสอบได้อย่างไรว่าองค์ประกอบเหมือนกันหรือไม่?
คำตอบ:
จาก jquery 1.6 ตอนนี้คุณสามารถทำได้:
$element1.is($element2)
สิ่งนี้ควรใช้งานได้:
if ($(this)[0] === $(this)[0]) alert('hello');
ควรเป็นเช่นนี้
if (openActivity[0] == $(this)[0]) alert('hello');
$.is
หรือเพียงแค่
if (openActivity[0] == this) alert('hello');
(ไม่มีอินสแตนซ์ jQuery ใหม่ ;-)
อย่างที่ใครบางคนบอกไปแล้วองค์ประกอบ 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 :)
ขอแสดงความนับถืออย่างสูง!
ฉันจะใช้ addClass () เพื่อทำเครื่องหมายเปิดและคุณสามารถตรวจสอบได้อย่างง่ายดาย
9 ปีต่อมาโดยไม่มี jQuery
ถ้าสององค์ประกอบเหมือนกันสององค์ประกอบจะต้องมีตัวชี้เดียวกัน ด้วยประการฉะนี้
document.body === document.body // true
document.querySelector('div') === document.querySelector('div') // true
document.createElement('div') === document.createElement('div') // false
เช่นเดียวกับที่เนียนหรือสันติกล่าวว่า ID หรือคลาสเฉพาะจะเป็นวิธีที่ง่ายที่สุดในการทดสอบ สาเหตุที่คำสั่ง if ของคุณไม่ได้ผลอย่างที่คุณคาดหวังเพราะมันเปรียบเทียบวัตถุ 2 ชิ้นและดูว่ามันเป็นวัตถุเดียวกันในหน่วยความจำหรือไม่
เนื่องจากเป็นวัตถุใหม่ที่สร้างขึ้นโดย $ (this) เสมอจึงไม่สามารถเท่ากันได้ นั่นเป็นเหตุผลที่คุณต้องทดสอบคุณสมบัติของวัตถุ คุณสามารถออกไปโดยไม่มี id / class ที่ไม่ซ้ำกันหากแต่ละองค์ประกอบ openActivity ได้รับการรับรองว่ามีเนื้อหาที่แตกต่างกันซึ่งคุณสามารถทดสอบได้