Estoy tratando de obtener el span secundario que tiene una clase = 4. Aquí hay un elemento de ejemplo:
<div id="test">
<span class="one"></span>
<span class="two"></span>
<span class="three"></span>
<span class="four"></span>
</div>
Las herramientas que tengo disponibles son JS y YUI2. Puedo hacer algo como esto:
doc = document.getElementById('test');
notes = doc.getElementsByClassName('four');
//or
doc = YAHOO.util.Dom.get('#test');
notes = doc.getElementsByClassName('four');
Estos no funcionan en IE. Recibo un error de que el objeto (doc) no admite este método o propiedad (getElementsByClassName). He probado algunos ejemplos de implementaciones en varios navegadores de getElementsByClassName, pero no pude hacer que funcionen y todavía recibí ese error.
Creo que lo que necesito es un getElementsByClassName de navegador cruzado o necesito usar doc.getElementsByTagName ('span') y recorrer hasta encontrar la clase 4. Sin embargo, no estoy seguro de cómo hacerlo.
javascript
yui
spyderman4g63
fuente
fuente

querySelectorAllIE 8+getElementsByClassNamees el más potente, mientras que solo es compatible con IE 9+. Si puede soltar IE 7, es seguro usarloquerySelectorAll('.4'). Por cierto,4es un nombre de clase no válido.document.querySelectorAlles DOM y no tiene nada que ver con YUIRespuestas:
Use
doc.childNodespara iterar a través de cada unospany luego filtre el que seaclassNameigual a4:
fuente
classNamemisma manera:if(doc.childNode[i].className.match("\s*" + search_class + "\s*")donde la variablesearch_classes el nombre de clase que está buscando.Utilice querySelector y querySelectorAll
IE9 y superior
;)
fuente
La respuesta aceptada solo verifica a los niños inmediatos. Muchas veces estamos buscando descendientes con ese nombre de clase.
Además, a veces queremos cualquier hijo que contenga un className.
Por ejemplo:
<div class="img square"></div>debe coincidir con una búsqueda en className "img", aunque sea exactamente className no es "img".Aquí hay una solución para ambos problemas:
Encuentra la primera instancia de un elemento descendiente con la clase
classNamefuente
Use element.querySelector (). Supongamos: 'myElement' es el elemento padre que ya tiene. 'sonClassName' es la clase del niño que está buscando.
Para obtener más información, visite: https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelector
fuente
let child = myElement.querySelector('sonClassName');en mi casoTu podrías intentar:
o
fuente
Para mí parece que quieres el cuarto tramo. Si es así, puedes hacer esto:
o
Este último garantiza que no haya ningún nodo oculto que pueda estropearlo.
fuente
TagName¡Eso es! Tan sencillo..firstChildy.firstChildElementaunquePero tenga en cuenta que los navegadores antiguos no son compatibles
getElementsByClassName.Entonces puedes hacer
Parece que funciona, pero tenga en cuenta que una clase HTML
fuente
Use el nombre de la identificación con
getElementById, sin#signo antes. Luego puedespanusar los nodos secundariosgetElementsByTagNamey recorrerlos para encontrar el que tenga la clase correcta:Manifestación: http://jsfiddle.net/Guffa/xB62U/
fuente
getElementsByTagNamemétodo funciona en IE 8. Se admite desde IE 5.5. developer.mozilla.org/en-US/docs/DOM/…En mi opinión, cada vez que puedas, debes usar Array y sus métodos. Son mucho, mucho más rápidos que hacer un bucle en todo el DOM / contenedor, o empujar cosas en una matriz vacía. La mayoría de las soluciones presentadas aquí puede llamar a Naive como se describe aquí (gran artículo por cierto):
https://medium.com/@chuckdries/traversing-the-dom-with-filter-map-and-arrow-functions-1417d326d2bc
Mi solución : (vista previa en vivo en Codepen: https://codepen.io/Nikolaus91/pen/wEGEYe )
fuente
La forma en que haré esto usando jquery es algo como esto ...
fuente
Aquí hay una solución recursiva relativamente simple. Creo que una búsqueda de amplitud es apropiada aquí. Esto devolverá el primer elemento que coincida con la clase que se encuentra.
fuente
Puede buscar la clase principal agregando la siguiente línea. Si tuviera una identificación, sería más fácil con
getElementById. Sin embargo,Luego puede usar
querySelectorAllen el padre<div>para obtener todos losdivs coincidentes con la clase.progress__markerquerySelectorAllbuscará todosdivcon la clase deprogress__markerfuente
Solución moderna
documentación
fuente
Actualización de junio de 2018 a ES6
fuente
YUI2 tiene una implementación de navegador cruzado de
getElementsByClassName.fuente
getElementsByClassNamees un método deYAHOO.util.Dom. En su caso, la llamada se vería algo asíYAHOO.util.Dom.getElementsByClassName('four', 'span', 'test'). Probablemente debería leer los documentos para obtener una comprensión más detallada de lo que está haciendo esa llamada. La versión corta es que ahora buscaráspanelementos con la clasefourdebajo del elemento DOMtestcomo suid.getllamada es solo un elemento DOM. YUI no toma el tipo de enfoque de venta completa de 'envolver todo en un objeto específico del marco' que hace algo como jQuery, ni hace parches de mono con objetos nativos como lo hace Prototype (¿no? en siempre). A este respecto, YUI es más como Dojo.Así es como lo hice usando los selectores YUI. Gracias a la sugerencia de Hank Gay.
donde four = classname, span = el tipo de elemento / nombre de etiqueta, y test = la identificación principal
fuente
Usar
YAHOO.util.Dom.getElementsByClassName()desde aquí .fuente