J'essaye d'obtenir le span enfant qui a une classe = 4. Voici un exemple d'élément:
<div id="test">
<span class="one"></span>
<span class="two"></span>
<span class="three"></span>
<span class="four"></span>
</div>
Les outils dont je dispose sont JS et YUI2. Je peux faire quelque chose comme ça:
doc = document.getElementById('test');
notes = doc.getElementsByClassName('four');
//or
doc = YAHOO.util.Dom.get('#test');
notes = doc.getElementsByClassName('four');
Ceux-ci ne fonctionnent pas dans IE. J'obtiens une erreur indiquant que l'objet (doc) ne prend pas en charge cette méthode ou propriété (getElementsByClassName). J'ai essayé quelques exemples d'implémentations multi-navigateurs de getElementsByClassName mais je n'ai pas pu les faire fonctionner et j'ai toujours cette erreur.
Je pense que ce dont j'ai besoin est un getElementsByClassName de navigateur croisé ou je dois utiliser doc.getElementsByTagName ('span') et faire une boucle jusqu'à ce que je trouve la classe 4. Je ne sais pas comment faire cela cependant.
javascript
yui
spyderman4g63
la source
la source
querySelectorAll
est pris en charge par IE 8+ alors qu'ilgetElementsByClassName
n'est pris en charge que par IE 9+. Si vous pouvez abandonner IE 7, vous pouvez l'utiliser en toute sécuritéquerySelectorAll('.4')
. Au fait,4
est un nom de classe invalide.document.querySelectorAll
est DOM et n'a rien à voir avec YUIRéponses:
Utilisez
doc.childNodes
pour parcourir chacun d'euxspan
, puis filtrez celui dont l'className
équivalent4
:
la source
className
comme ceci:if(doc.childNode[i].className.match("\s*" + search_class + "\s*")
où la variablesearch_class
est le nom de classe que vous recherchez.Utiliser querySelector et querySelectorAll
IE9 et supérieur
;)
la source
La réponse acceptée ne vérifie que les enfants immédiats. Souvent, nous recherchons des descendants avec ce nom de classe.
Aussi, parfois nous voulons n'importe quel enfant qui contient un className.
Par exemple:
<div class="img square"></div>
doit correspondre à une recherche sur className "img", même si son exact className n'est pas "img".Voici une solution à ces deux problèmes:
Trouvez la première instance d'un élément descendant avec la classe
className
la source
Utilisez element.querySelector (). Supposons: «myElement» est l'élément parent que vous avez déjà. 'sonClassName' est la classe de l'enfant que vous recherchez.
Pour plus d'informations, visitez: https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelector
la source
let child = myElement.querySelector('sonClassName');
dans mon casTu pourrais essayer:
ou
la source
Pour moi, il semble que vous vouliez la quatrième travée. Si tel est le cas, vous pouvez simplement le faire:
ou
Ce dernier garantit qu'il n'y a aucun nœud caché qui pourrait le gâcher.
la source
TagName
c'est tout! Si simple..firstChild
et.firstChildElement
bienMais sachez que les anciens navigateurs ne prennent pas en charge
getElementsByClassName
.Ensuite, vous pouvez faire
Cela semble fonctionner, mais sachez qu'une classe HTML
la source
Utilisez le nom de l'identifiant avec le
getElementById
, aucun#
signe devant lui. Ensuite, vous pouvez obtenir lesspan
nœuds enfants en utilisantgetElementsByTagName
, et les parcourir pour trouver celui avec la bonne classe:Démo: http://jsfiddle.net/Guffa/xB62U/
la source
getElementsByTagName
méthode fonctionne dans IE 8. Elle est prise en charge depuis IE 5.5. developer.mozilla.org/en-US/docs/DOM/…À mon avis, chaque fois que vous le pouvez, vous devez utiliser Array et ses méthodes. Ils sont beaucoup, beaucoup plus rapides que de boucler sur tout le DOM / wrapper, ou de pousser des éléments dans un tableau vide. La majorité des solutions présentées ici, vous pouvez appeler Naive comme décrit ici (excellent article btw):
https://medium.com/@chuckdries/traversing-the-dom-with-filter-map-and-arrow-functions-1417d326d2bc
Ma solution : (aperçu en direct sur Codepen: https://codepen.io/Nikolaus91/pen/wEGEYe )
la source
La façon dont je vais faire cela en utilisant jquery est quelque chose comme ça.
la source
Voici une solution récursive relativement simple. Je pense qu'une recherche en profondeur est appropriée ici. Cela renverra le premier élément correspondant à la classe trouvée.
la source
Vous pouvez récupérer la classe parente en ajoutant la ligne ci-dessous. Si vous aviez un identifiant, ce serait plus facile avec
getElementById
. Toutefois,Ensuite, vous pouvez utiliser
querySelectorAll
sur le parent<div>
pour récupérer tous lesdiv
s correspondants avec la classe.progress__marker
querySelectorAll
ira chercher tousdiv
avec la classe deprogress__marker
la source
Solution moderne
Documentation
la source
Mise à jour de juin 2018 vers ES6
la source
YUI2 a une implémentation multi-navigateurs de
getElementsByClassName
.la source
getElementsByClassName
est une méthode deYAHOO.util.Dom
. Dans votre cas, l'appel ressemblerait à quelque chose commeYAHOO.util.Dom.getElementsByClassName('four', 'span', 'test')
. Vous devriez probablement lire la documentation pour avoir une compréhension plus détaillée de ce que fait cet appel. La version courte est qu'il recherchera maintenant lesspan
éléments avec la classefour
sous l'élément DOM avectest
comme sonid
.get
appel n'est qu'un élément DOM. YUI ne prend pas le genre d'approche globale `` envelopper tout dans un objet spécifique au framework '' que quelque chose comme jQuery fait, pas plus qu'il ne modifie les objets natifs comme Prototype (l'avez-vous fait? Je n'ai pas foiré avec Protoype pour toujours). À cet égard, YUI ressemble plus à Dojo.Voici comment je l'ai fait en utilisant les sélecteurs YUI. Merci à la suggestion de Hank Gay.
où quatre = nom de classe, span = le type d'élément / nom de la balise et test = l'ID parent.
la source
Utilisez à
YAHOO.util.Dom.getElementsByClassName()
partir d' ici .la source