jQuery การเดินทาง - การใช้ closest()
ตัวอย่าง
ตัวอย่างนี้แสดงว่าเราจะทำ event delegation ด้วย closest(). เมื่อองค์ประกอบรายการหรือลูกของมันที่ใกล้ที่สุดถูกคลิก จะเปลี่ยนสีพื้นหลังเป็นสีเหลือง:
$( document ).bind("click", function( e ) { $( e.target ).closest("li").toggleClass("hilight"); });
คำนิยามและการใช้งาน
closest() หาองค์ประกอบที่ตรงกับเลือกตัวเลือกแรกที่เป็นเจ้าพ่อ จากองค์ประกอบปัจจุบันขึ้นตามต้นไม้ DOM
คำนิยาม
.closest(selector)
ตัวแปร | อธิบาย |
---|---|
selector | ค่าตัวแปรตัวอักษร ที่มีเลือกตัวเลือกที่ตรงกับองค์ประกอบที่ตรงกับเลือกตัวเลือก |
รายละเอียด
หากมี jQuery Object ที่แสดงชุดขององค์ประกอบ DOM มา ใช้ .closest() มีความหมายว่าเราสามารถค้นหาองค์ประกอบนี้และองค์ประกอบที่เป็นเจ้าพ่อของมันในต้นไม้ DOM และใช้องค์ประกอบที่ตรงกับเลือกตัวเลือกเพื่อทำ jQuery Object ใหม่.parents() และ .closest() มีความเหมือนกันที่จะเดินทางขึ้นตามต้นไม้ DOM ตามที่เห็นได้; แต่ความแตกต่างที่ไม่เป็นจริงนั้นสำคัญมาก:
.closest() | .parents() |
---|---|
จากองค์ประกอบปัจจุบัน | จากองค์ประกอบพ่อ |
เดินทางขึ้นตามต้นไม้ DOM จนหาถึงองค์ประกอบที่ตรงกับเลือกตัวเลือกที่มีการปรับปรุง | เดินทางขึ้นตามต้นไม้ DOM จนถึงต้นไม้ของเอกสาร และเพิ่มแต่ละองค์ประกอบที่เป็นเจ้าพ่อเข้าสู่ชุดชั่วคราว; หากมีการใช้เลือกตัวเลือก จะทำการกรองชุดดังกล่าวเบื้องต้นด้วยเลือกตัวเลือกนั้น |
ส่งผลลัพธ์เป็น jQuery Object ที่มีสมาชิกที่มีจำนวนเท่ากับ 0 หรือ 1 | ส่งผลลัพธ์เป็น jQuery Object ที่มีสมาชิกที่มีจำนวนเท่ากับ 0, 1 หรือมากกว่า |
โปรดดูส่วนต่อไปนี้ของ HTML บล็อค
<ul id="one" class="level-1"> <li class="item-i">I</li> <li id="ii" class="item-ii">II <ul class="level-2"> <li class="item-a">A</li> <li class="item-b">B <ul class="level-3"> <li class="item-1">1</li> <li class="item-2">2</li> <li class="item-3">3</li> </ul> </li> <li class="item-c">C</li> </ul> </li> <li class="item-iii">III</li> </ul>
ตัวอย่าง 1
จงจัดการค้นหาตัวแทน <ul> ที่เริ่มต้นจาก item A
$('li.item-a').closest('ul').css('background-color', 'red');
นี้จะเปลี่ยนสีของ level-2 <ul> นี้เพราะเมื่อเคลื่อนไปขึ้นออกมาหาต้นของต้นโซ่ DOM มันจะเจอแรกที่อิเลย์ท์นี้
ตัวอย่าง 2
จงเลือก element <li> ที่เราค้นหา
$('li.item-a').closest('li').css('background-color', 'red');
นี้จะเปลี่ยนสีของรายการ item A ก่อนที่จะเคลื่อนไปขึ้นออกมาหาต้นของต้นโซ่ DOM วิธี .closest() จะเริ่มค้นหาจากตัวแทน li มาตั้งแต่เริ่มต้น จนกว่าจะตรงกับรายการ A
ตัวอย่าง 3
เราสามารถส่งออก DOM อิเลย์ท์เพื่อค้นหาอิเลย์ท์ใกล้เคียงในองค์กรรม
var listItemII = document.getElementById('ii'); $('li.item-a').closest('ul', listItemII).css('background-color', 'red'); $('li.item-a').closest('#one', listItemII).css('background-color', 'green');
รหัสที่แถวนี้จะเปลี่ยนสีของ level-2 <ul> เพราะมันเป็นประวัติต้นของ <ul> ของ item A และเป็นลูกหลานของ item II มันจะไม่เปลี่ยนสีของ level-1 <ul> เพราะมันไม่ใช่ลูกหลานของ item II