disons que j'ai un balisage comme ceci:
<div id="foo">
...
<span id="moo">
...
</span>
...
</div>
et je veux choisir #moo.
pourquoi $('#foo').find('span')
fonctionne, mais pas $('span', $('#foo'));
?
Vous pouvez utiliser n'importe lequel de ceux-ci [à partir du plus rapide]
$("#moo") > $("#foo #moo") > $("div#foo span#moo") > $("#foo span") > $("#foo > #moo")
En fait, $ ('# id', this); sélectionnerait #id à n’importe quel niveau de descendant, pas seulement l’enfant immédiat. Essayez ceci à la place:
$(this).children('#id');
ou
$("#foo > #moo")
ou
$("#foo > span")
Pourquoi ne pas simplement utiliser:
$("#foo span")
ou
$("#foo > span")
$('span', $('#foo'));
fonctionne bien sur ma machine;)
Regardez ici - pour interroger un sous-élément d'un élément:
$(document.getElementById('parentid')).find('div#' + divID + ' span.child');
Vous pouvez utiliser l’option find
pour sélectionner un élément dans un autre. Par exemple, pour trouver un élément avec id txtName dans un div particulier, vous pouvez utiliser comme
var name = $('#div1').find('#txtName').val();
.... mais $ ('span', $ ('# toto')); ne fonctionne pas?
Cette méthode est appelée comme fournissant contexte de sélecteur .
En cela, vous fournissez un deuxième argument au sélecteur jQuery . Ce peut être n'importe quelle chaîne d'objet css, comme vous le feriez avec une sélection directe ou un élément jQuery.
par exemple.
$("span",".cont1").css("background", '#F00');
La ligne ci-dessus sélectionnera toutes les plages du conteneur ayant la classe nommée cont1
.
les deux semblent fonctionner.
voir le violon: http://jsfiddle.net/maniator/PSxkS/