jQuery - เลือกองค์ประกอบจากภายในองค์ประกอบ


95

สมมติว่าฉันมีมาร์กอัปดังนี้:

<div id="foo">
  ...
  <span id="moo">
    ...
  </span>
  ...
</div>

และฉันต้องการเลือก #moo

ทำไมถึงใช้$('#foo').find('span')งานได้ แต่$('span', $('#foo'));ทำไม่ได้?


10
ทำไมไม่$('#moo')? ;) Btw. มันใช้งานได้: jsfiddle.net/fkling/k5X2r
Felix Kling

ฉันไม่รู้ว่าทำไม แต่ฟังก์ชันที่ฉันเชื่อมต่อกับช่วงที่เลือกจะถูกนำไปใช้กับทุกช่วงในหน้าไม่ใช่เฉพาะใน #foo :(
Alex

2
แล้วเมื่อคุณมีองค์ประกอบที่เลือกในตัวแปรแล้วตัวอย่างเช่นคุณเริ่มต้นด้วยvar ele = $("div #foo")วิธีที่คุณจะไปยังหมู่จากที่นี่ได้อย่างไร (โดยไม่ต้องใช้การอ้างอิงอาร์เรย์)
สมควร 7

คำตอบ:


130

คุณสามารถใช้สิ่งเหล่านี้ [เริ่มจากเร็วที่สุด]

$("#moo") > $("#foo #moo") > $("div#foo span#moo") > $("#foo span") > $("#foo > #moo")

ลองดูสิ


1
ฉันคิดว่าอันที่สามควรเป็นช่วง # moo not span # foo?
xr280xr

60

จริงๆแล้ว $ ('# id' นี้); จะเลือก #id ในระดับลูกหลานใด ๆ ไม่ใช่เฉพาะเด็กในทันที ลองสิ่งนี้แทน:

$(this).children('#id');

หรือ

$("#foo > #moo")

หรือ

$("#foo > span")

ซึ่งจะไม่เลือกอะไรเลยเนื่องจากองค์ประกอบมีID mooไม่ใช่คลาส
Felix Kling

4
เป็นที่น่าสังเกตว่า.children()และ.find()จะคล้ายกันยกเว้นว่าอดีตเดินทางไปตามแผนผังย่อย DOM เพียงระดับเดียว
Kevin

10

ทำไมไม่ใช้:

$("#foo span")

หรือ

$("#foo > span")

$('span', $('#foo')); ทำงานได้ดีบนเครื่องของฉัน;)


$($(elementA), 'tr#' + key + ' span')ไม่ทำงานสำหรับฉัน (jQuery 1.10.2)
Cody

9

คุณสามารถใช้findตัวเลือกเพื่อเลือกองค์ประกอบภายในอื่น ตัวอย่างเช่นหากต้องการค้นหาองค์ประกอบที่มี id txtNameใน div เฉพาะคุณสามารถใช้ like

var name = $('#div1').find('#txtName').val();

6

ดูที่นี่ - เพื่อค้นหาองค์ประกอบย่อยขององค์ประกอบ :

$(document.getElementById('parentid')).find('div#' + divID + ' span.child');


3

.... แต่ $ ('span', $ ('# foo')); ไม่ได้ผล?

วิธีการนี้เรียกว่าเป็นการให้บริบทเลือก

ในนี้คุณให้อาร์กิวเมนต์ที่สองไปที่ตัวเลือก jQuery อาจเป็นสตริงออบเจ็กต์ css ใด ๆ ก็ได้เช่นเดียวกับที่คุณส่งผ่านสำหรับการเลือกโดยตรงหรือองค์ประกอบ jQuery

เช่น.

$("span",".cont1").css("background", '#F00');

cont1บรรทัดข้างต้นจะเลือกครอบคลุมทั้งหมดภายในภาชนะที่มีระดับที่มีชื่อ

การสาธิต


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