2011-04-27 9 views
57

powiedzmy Mam znaczników tak:jQuery - wybierając elementy z wnętrza elementu

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

i chcę wybrać #moo.

dlaczego $('#foo').find('span') działa, ale $('span', $('#foo')); nie?

+10

Dlaczego nie '$ ('# moo')'? ;) Btw. to działa: http://jsfiddle.net/fkling/k5X2r/ –

+0

Lub '$ ('# foo span')' ;-) – Capsule

+0

Nie wiem dlaczego, ale funkcja, którą przechwytuję do wybranego zakresu, zostaje zastosowana do wszystkich rozciąga się na stronie, a nie tylko wewnątrz #foo :( – Alex

Odpowiedz

90

Można użyć dowolnego jednego nich [począwszy od najszybszy]

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

Take a look

+1

Myślę, że trzeci powinien być w stanie # moo nie rozpiętym # foo? – xr280xr

+0

Yup .. Zrobiłem c ordynacja –

34

Właściwie $ ('# id', this); wybrałby #id na dowolnym poziomie potomka, a nie tylko na bezpośrednim potomku. Spróbuj to zamiast:

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

lub

$("#foo > #moo") 

lub

$("#foo > span") 
+0

To niczego nie wybierze, ponieważ element ma ** ID ** 'moo', a nie klasę –

+0

Warto zauważyć, że' .children() 'i'. find() 'są podobne, z wyjątkiem tego, że pierwszy przechodzi tylko o jeden poziom w dół pod drzewo DOM. – Kevin

8

Dlaczego nie wystarczy użyć:

$("#foo span") 

lub

$("#foo > span") 

$('span', $('#foo')); działa dobrze na moim komputerze;)

+0

' $ ($ (elementA), 'tr #' + klawisz + 'span') 'nie działa dla mnie (jQuery 1.10 .2) – Cody

6

Sprawdźcie tutaj - zapytać o podelement elementu::

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

1

Możesz użyć opcji find, aby wybrać element wewnątrz innego. Na przykład, aby znaleźć element o identyfikatorze txtName w danym div, można użyć jak

var name = $('#div1').find('#txtName').val(); 
Powiązane problemy