Em CSS, se você quiser atingir um elemento específico que segue imediatamente outro elemento específico, você usaria o combinador irmão mais próximo:
<style>
/* any 'p' that immediately follows 'div' will be red */
div + p { color: red; }
</style>
<div>
<p>foo</p> <!-- black -->
</div>
<p>bar</p> <!-- red -->
<p>baz</p> <!-- black -->
<div>
<p>foo</p> <!-- black -->
</div>
<p>bar</p> <!-- red -->
<p>baz</p> <!-- black -->
Mas como fazer isso em JavaScript? Eu tentei closest
, mas não estou surpreso que não funcione. Se eu entendi sua descrição no MDN, a intenção é que funcione de forma diferente.
<div class="input" style="display: none">
foo
</div>
<div class="output"></div>
<div class="input" style="display: none">
foo
</div>
<div class="output"></div>
<script>
'use strict';
window.onload = function() {
for (const input of document.querySelectorAll('.input')) {
document.querySelector(input.closest('body > .output')).innerHTML = 'input.innerHTML';
}
}
</script>
Como fazer isso funcionar?
Isso é abordado pela segunda duplicata sinalizada, Existe uma maneira de selecionar nós irmãos?, e basicamente copiado da documentação nextElementSibling , mas vou colocá-la aqui por enquanto.
Itere sobre cada
input
'snextElementSibling
s até encontrar um que contenha a classe relevante. Aqui usandoclassList.contains
Você pode usar
Element#nextElementSibling
: