คุณจะเปรียบเทียบวัตถุ jQuery ได้อย่างไร?


101

ดังนั้นฉันจึงพยายามหาวิธีเปรียบเทียบวัตถุ jQuery สองรายการเพื่อดูว่าองค์ประกอบหลักเป็นเนื้อหาของหน้าหรือไม่

นี่คือสิ่งที่ฉันมี:

if ( $(this).parent() === $('body') ) ...

ฉันรู้ว่าสิ่งนี้ผิด แต่ถ้าใครเข้าใจสิ่งที่ฉันได้รับพวกเขาช่วยชี้ทางให้ฉันทำสิ่งนี้ได้ถูกต้องหรือไม่


2
var $parent = $(this).parent(), $body = $('body'); var theSame = $parent.is($body); api.jquery.com/is/#is-jQuery-object
วิกเตอร์

1
$ (this) .parent (). is ($ ('body')); // หรือตรวจสอบสิ่งอื่นนอกจาก $ ('body') stackoverflow.com/a/6986013/112100
Omu

คำตอบ:


158

คุณต้องเปรียบเทียบองค์ประกอบ DOM ดิบเช่น:

if ($(this).parent().get(0) === $('body').get(0))

หรือ

if ($(this).parent()[0] === $('body')[0])

1
ซึ่งจะทำให้เกิดความเท่าเทียมกันก็ต่อเมื่อวัตถุ jQuery ตรงกับองค์ประกอบ DOM เดียว หากมีการแข่งขันหลายรายการคุณจะต้องมีการวนซ้ำเพื่อเปรียบเทียบแต่ละรายการ
Jimmy Cuadra

1
@ จิมมี่ใช่ แต่นี่ก็เพียงพอแล้วสำหรับข้อกำหนดของ OP เขาต้องการเพียงรู้ว่า "... ถ้าองค์ประกอบหลักคือร่างกาย ... "
CMS

2
สามารถย่อเป็น: if (this.parentNode === document.body);
สิ้นสุด



18

ไม่จำเป็นต้องมีการวนซ้ำไม่จำเป็นต้องทดสอบโหนดแรกเดียว ไม่จำเป็นต้องใช้อะไรมากนอกจากการตรวจสอบให้แน่ใจว่ามีความยาวเท่ากันและใช้โหนดที่เหมือนกัน นี่คือข้อมูลโค้ดขนาดเล็ก คุณอาจต้องการแปลงสิ่งนี้เป็นปลั๊กอิน jquery สำหรับการใช้งานของคุณเอง

jQuery(function($) {
  // Two separate jQuery references
  var divs = $("div");
  var divs2 = $("div");

  // They are equal
  if (divs.length == divs2.length && divs.length == divs.filter(divs2).length) {         

  // They are not
  } else {}
});

นี่จะไม่บอกว่า div ต่อไปนี้เท่ากันหรือ? <div>abc</div> <div>def</div>
Charlie Schliesser

ไม่ตัวกรองจะไม่ส่งผ่านองค์ประกอบ DOM ที่ไม่เท่ากัน
tbranyen

2

ฉันสะดุดกับคำตอบเหล่านี้และสงสัยว่าอันไหนดีกว่ากัน ทุกอย่างขึ้นอยู่กับความต้องการของคุณ แต่วิธีที่ง่ายที่สุดในการพิมพ์อ่านและดำเนินการคือสิ่งที่ดีที่สุด นี่คือบททดสอบที่สมบูรณ์แบบที่ฉันตัดสินใจ

http://jsperf.com/jquery-objects-comparison


Raw DOM Elements 2 รายงานที่เร็วที่สุดสำหรับฉัน: ดูเหมือนว่าจะเหมือนกันสำหรับทุกเบราว์เซอร์ที่รายงานอื่น ๆ ด้วย
Kyle Hotchkiss

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