สมมติว่าฉันมีมาร์กอัปดังนี้:
<div id="foo">
...
<span id="moo">
...
</span>
...
</div>
และฉันต้องการเลือก #moo
ทำไมถึงใช้$('#foo').find('span')
งานได้ แต่$('span', $('#foo'));
ทำไม่ได้?
สมมติว่าฉันมีมาร์กอัปดังนี้:
<div id="foo">
...
<span id="moo">
...
</span>
...
</div>
และฉันต้องการเลือก #moo
ทำไมถึงใช้$('#foo').find('span')
งานได้ แต่$('span', $('#foo'));
ทำไม่ได้?
var ele = $("div #foo")
วิธีที่คุณจะไปยังหมู่จากที่นี่ได้อย่างไร (โดยไม่ต้องใช้การอ้างอิงอาร์เรย์)
คำตอบ:
จริงๆแล้ว $ ('# id' นี้); จะเลือก #id ในระดับลูกหลานใด ๆ ไม่ใช่เฉพาะเด็กในทันที ลองสิ่งนี้แทน:
$(this).children('#id');
หรือ
$("#foo > #moo")
หรือ
$("#foo > span")
moo
ไม่ใช่คลาส
.children()
และ.find()
จะคล้ายกันยกเว้นว่าอดีตเดินทางไปตามแผนผังย่อย DOM เพียงระดับเดียว
ทำไมไม่ใช้:
$("#foo span")
หรือ
$("#foo > span")
$('span', $('#foo'));
ทำงานได้ดีบนเครื่องของฉัน;)
$($(elementA), 'tr#' + key + ' span')
ไม่ทำงานสำหรับฉัน (jQuery 1.10.2)
คุณสามารถใช้find
ตัวเลือกเพื่อเลือกองค์ประกอบภายในอื่น ตัวอย่างเช่นหากต้องการค้นหาองค์ประกอบที่มี id txtNameใน div เฉพาะคุณสามารถใช้ like
var name = $('#div1').find('#txtName').val();
ดูที่นี่ - เพื่อค้นหาองค์ประกอบย่อยขององค์ประกอบ :
$(document.getElementById('parentid')).find('div#' + divID + ' span.child');
.... แต่ $ ('span', $ ('# foo')); ไม่ได้ผล?
วิธีการนี้เรียกว่าเป็นการให้บริบทเลือก
ในนี้คุณให้อาร์กิวเมนต์ที่สองไปที่ตัวเลือก jQuery อาจเป็นสตริงออบเจ็กต์ css ใด ๆ ก็ได้เช่นเดียวกับที่คุณส่งผ่านสำหรับการเลือกโดยตรงหรือองค์ประกอบ jQuery
เช่น.
$("span",".cont1").css("background", '#F00');
cont1
บรรทัดข้างต้นจะเลือกครอบคลุมทั้งหมดภายในภาชนะที่มีระดับที่มีชื่อ
ทั้งสองดูเหมือนจะทำงาน
$('#moo')
? ;) Btw. มันใช้งานได้: jsfiddle.net/fkling/k5X2r