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
querySelectorAll
IE 8+getElementsByClassName
es el más potente, mientras que solo es compatible con IE 9+. Si puede soltar IE 7, es seguro usarloquerySelectorAll('.4')
. Por cierto,4
es un nombre de clase no válido.document.querySelectorAll
es DOM y no tiene nada que ver con YUIRespuestas:
Use
doc.childNodes
para iterar a través de cada unospan
y luego filtre el que seaclassName
igual a4
:
fuente
className
misma manera:if(doc.childNode[i].className.match("\s*" + search_class + "\s*")
donde la variablesearch_class
es 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
className
fuente
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..firstChild
y.firstChildElement
aunquePero 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 puedespan
usar los nodos secundariosgetElementsByTagName
y recorrerlos para encontrar el que tenga la clase correcta:Manifestación: http://jsfiddle.net/Guffa/xB62U/
fuente
getElementsByTagName
mé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
querySelectorAll
en el padre<div>
para obtener todos losdiv
s coincidentes con la clase.progress__marker
querySelectorAll
buscará todosdiv
con la clase deprogress__marker
fuente
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
getElementsByClassName
es 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áspan
elementos con la clasefour
debajo del elemento DOMtest
como suid
.get
llamada 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