Quiero decir que el código funciona, pero en algún momento, me parece un poco extraño, así que me preguntaba si alguien conoce una mejor manera de apuntar al último elemento secundario del elemento hermano anterior.
Básicamente, tengo un control deslizante cuyo valor quiero mostrar con el intervalo de su hermano anterior, por ejemplo:
<div class="xOffsetBox"> <label for="xOffset" class="xOffsetText">xOffset <span>0 px</span></label> <input type="range" name="xOffset" id="xOffsetRange1" min="-100" max="100" value="0"> </div>Y, dentro de una función js, obtengo el valor de la entrada de rango.
function getRangeValue () { for (let i = 0; i < Shadows.length; i++) { let xOffset = document.getElementById(Shadows[i].xOffsetValue).value; let xOffsetSpan = document.getElementById(Shadows[i].xOffsetValue).previousElementSibling.lastElementChild; xOffsetSpan.textContent = xOffset + " px"; }; };Probablemente usaría atributos de datos que son bastante útiles. No contaminan su atributo css-class y no es único como id. Además, es bastante fácil de escalar.
No hay mucho que pueda hacer aquí con su consulta, ya que intenta trabajar con un hermano.
La pregunta también es: ¿Qué estás tratando de lograr aquí? ¿Qué es "mejor" en tus propias palabras? ¿Son las líneas de código lo que desea reducir, reducir la complejidad o encontrar una forma alternativa? Puede usar una id , una class o incluso un data-attribute en ese hermano y simplemente acceder a él con document.querySelector o para la búsqueda de identificación: document.getElementById . Realmente depende de lo que intentes lograr.
Podrías, tal vez, optimizarlo así:
for (let i = 0; i < Shadows.length; i++) { const el = document.getElementById(Shadows[i].xOffsetValue); const xOffset = el.value; const xOffsetSpan = el.previousElementSibling.lastElementChild; xOffsetSpan.textContent = xOffset + " px"; }; De esta forma, no tiene que recorrer el DOM dos veces para encontrar el elemento. También puede usar const en lugar de let , si no desea modificar estos valores. Tal vez incluso use un iterador for-of en su lugar, si lo desea.