jQuery วนลูป - วิธีการ is()
ตัวอย่าง
กลับค่า false เพราะ element input มี parent คือ element p
var isFormParent = $("input[type='checkbox']").parent();.is("form"); $("div").text("isFormParent = " + isFormParent);
การกำหนดและการใช้งาน
is() ตรวจสอบ element หรือ jQuery object ตาม selector หรือ element หรือ jQuery object ว่ามี element ที่ตรงกับค่าที่กำหนดหรือไม่ ถ้ามีอย่างน้อยหนึ่ง element ตรงกับค่าที่กำหนด ก็จะกลับค่า true
การใช้งาน
.is(selector)
ตัวแปร | การอธิบาย |
---|---|
selector | ค่าของ string ที่มี selector expression ที่ตรงกับ element ที่ต้องการค้นหา |
รายละเอียด
ต่างจากวิธีการกรองอื่น คำสั่ง .is() ไม่สร้าง jQuery object ใหม่ และอนุญาตให้เราตรวจสอบ jQuery object โดยไม่เปลี่ยนแปลงเนื้อหาของมัน นี่มักมีประโยชน์ใน callback ภายใน เช่น event handler。
จงเล็งเห็นว่าเรามีรายการที่มีสองโครงการที่มีย่อยอย่างเช่น:
<ul> <li>list <strong>item 1</strong></li> <li><span>list item 2</span></li> <li>list item 3</li> </ul>
คุณสามารถเพิ่ม event handler ให้กับ element <ul> และจำกัดรหัสเพียงเมื่อรายการที่มีความหมายเด็ดขาดถูกคลิก ไม่ใช่อย่างเด็ดขาดของย่อยอย่างเช่น:
$("ul").click(function(event) { var $target = $(event.target); if ( $target.is("li") ) { $target.css("background-color", "red"); } });
ตอนนี้ เมื่อผู้ใช้คลิกที่คำแปลงเป็น "list" ในรายการแรกหรือคำใดๆ ในรายการที่สาม รายการที่ถูกคลิกจะมีสีพื้นหลังแดง แต่เมื่อผู้ใช้คลิกที่ "item 1" ในรายการแรกหรือคำใดๆ ในรายการที่สอง จะไม่มีการเปลี่ยนแปลงใดๆ เพราะในกรณีนี้ จุดมุ่งหมายของเหตุการณ์คือ <strong> คือ <span>。
โปรดทำให้เข้าใจว่า สำหรับตัวแสดงเลือกตัวเลือกที่มีตำแหน่ง อย่างเช่น :first, :gt() หรือ :even การคัดกรองตำแหน่งนั้นมีขึ้นต่อโจทย์จาก jQuery ที่ถูกส่งมาที่ .is() ไม่ใช่สำหรับเอกสารที่มีอยู่ในบันทึก ดังนั้น สำหรับ HTML ด้านบน ตัวแสดงเช่น $("li:first").is("li:last") จะกลับมาเป็น true แต่ $("li:first-child").is("li:last-child") จะกลับมาเป็น false
ใช้ฟังก์ชัน
วิธีใช้ของอีกอันหนึ่งของการ์นาลนี้คือ การประมวลผลตัวแสดงที่มีความเกี่ยวข้องกับฟังก์ชันแทนที่จะเป็นเลือกตัวเลือกต่าง ๆ สำหรับใช้กับฟังก์ชัน สำหรับแต่ละองค์ประกอบ ถ้าฟังก์ชันหลังทำการประมวลผลแล้วเป็น true ก็จะทำให้ .is() กลับมาเป็น true ด้วย เช่น ใน HTML ชิ้นต่อไปนี้:
<ul> <li><strong>list</strong> item 1 - one strong tag</li> <li><strong>list</strong> item <strong>2</strong> - two <span>strong tags</span></li> <li>list item 3</li> <li>list item 4</li> <li>list item 5</li> </ul>
คุณสามารถเพิ่มมือชี้แก้ไข click ให้กับแต่ละ <li> เพื่อนับจำนวนองค์ประกอบ <strong> ภายใน <li> ที่ถูกคลิก:
$("li").click(function() { var $li = $(this), isWithTwo = $li.is(function() { return $('strong', this).length === 2; });; if ( isWithTwo ) { $li.css("background-color", "green"); } แต่ในกรณีที่ไม่เป็นนั้น { $li.css("background-color", "red"); } });