6
votes

Comment gérer les getelementsbytagname sur les enfants d'un élément seulement?

J'ai des difficultés à obtenir un sélecteur pour fonctionner correctement.

J'ai ce HTML: p> xxx pré>

et j'essaie de sélectionner le CODE> Tags, qui sont des enfants de UI-ControlGroup-Controls Code> - ce qui signifie à l'exclusion de ce qui est à l'intérieur du formulaire. P>

C'est ce que j'essaie: p>

// el is my div.wrapper element
el.children[0].getElementsByTagName("div");


0 commentaires

4 Réponses :


5
votes

Un moyen de faire cela consiste à itérer sur votre liste de nœuds résultants et à vérifier le parent: xxx

Voici une démonstration de cette approche: http://jsfiddle.net/wlhy2/

une approche plus simple (bien que moins efficace) consiste à utiliser queryselectorall Pour récupérer les nœuds pertinents à l'aide d'une expression sélecteur: xxx


1 commentaires

bonne idée. En attente d'une solution plus compliquée. Sinon, vous obtenez le signe de tête! Merci!



1
votes

Dans la plupart des navigateurs, vous pouvez faire: xxx pré>


mais cela pourrait donner de faux positifs s'il y a plus profondément imbriqué ". UI-contrôl-contrôle" Code> que vous voulez éviter. p>

Si c'est le cas, il suffit d'itérer le .children code> et construisez une collection de divs imbriqués. P>

var divs = [];

for (var j = 0, lenj = el.children[0].children.length; j <, lenj; j++) 
    if (el.children[0].children[j].nodeName === "DIV") 
        divs.push(el.children[o].children[j])


0 commentaires

2
votes

pour le navigateur qui prend en charge QuerySelectorall :

var nodes = el.children[0].children;
var divs = [];

for (var l = nodes.length, node; node = nodes[--l];) {
  if (node.tagName === "DIV")
    divs.push(node);
}


1 commentaires

Merci pour les alternatives



1
votes
<your-element>.querySelectorAll(":scope > div");
:scope is a pseudo-class representing the parent element. No support in IE, but there is a shim.

0 commentaires