Если нужный элемент всегда идет после элемента с id
, который вы передаете функции, вы можете использовать соседний братский комбинатор (+
) , чтобы выбрать и заменить Document.querySelectorAll()
с Document.querySelector()
:
function getCheckbox(id){
return document.querySelector(`[id="d${ id }"] + [id^="d${ id }."]`);
}
document.onchange = (e) => {
console.log(getCheckbox(e.target.id.substring(1)));
};
console.log(getCheckbox('1'));
console.log(getCheckbox('1.1'));
console.log(getCheckbox('1.1.1'));
label {
display: block;
}
.as-console-wrapper {
max-height: 67px !important;
}
<label id="d1">
<input type="checkbox" id="c1" />
1
</label>
<label id="d1.1">
<input type="checkbox" id="c1.1" />
1.1
</label>
<label id="d1.1.1">
<input type="checkbox" id="c1.1.1" />
1.1.1
</label>
Если это не так, и у вас могут быть какие-то другие элементы между, вы можете сделать что-то подобное, используя общего родственного брата комбинатор (~
) вместо:
function getCheckbox(id) {
return document.querySelector(`[id="d${ id }"] ~ [id^="d${ id }."]`)
}
document.onchange = (e) => {
console.log(getCheckbox(e.target.id.substring(1)));
};
console.log(getCheckbox('1'));
console.log(getCheckbox('1.1'));
console.log(getCheckbox('1.1.1'));
label {
display: block;
}
.as-console-wrapper {
max-height: 67px !important;
}
<label id="d1">
<input type="checkbox" id="c1" />
1
</label>
<span></span>
<label id="d1.1">
<input type="checkbox" id="c1.1" />
1.1
</label>
<span></span>
<label id="d1.1.1">
<input type="checkbox" id="c1.1.1" />
1.1.1
</label>