我有一个呈现为以下结构的文档:
<tr>
<td>
<div class="csLabel">
<label for="common_id">Label</label>
</div>
</td>
<td>
<div class="csFields">
<select id="common_id" name="someName">
<option value="">some options...</option>
</select>
</div>
</td>
</tr>
页面上有很多这样的元素,我只想隐藏其中的几个。如您所见,有两个元素:label
和select
。它们都共享相同的值common_id
,但是在label
中它被分配给for
属性,在select
中它被分配为id
。
有没有办法获取所有使用值common_id
的元素?
答案 0 :(得分:1)
尝试一下
如果您只想隐藏行,则只需要ID:
var id = "common_id2";
[...document.querySelectorAll("#"+id)].forEach(function(ele) {
ele.closest("tr").style.display="none";
})
<table>
<tbody>
<tr>
<td>
<div class="csLabel">
<label for="common_id1">Label</label>
</div>
</td>
<td>
<div class="csFields">
<select id="common_id1" name="someName">
<option value="">some options...</option>
</select>
</div>
</td>
</tr>
<tr>
<td>
<div class="csLabel">
<label for="common_id2">Label</label>
</div>
</td>
<td>
<div class="csFields">
<select id="common_id2" name="someName">
<option value="">some options...</option>
</select>
</div>
</td>
</tr>
</tbody>
</table>
如果标签和元素位于不同的行中,则需要ID和for = ID
var id = "common_id2";
[...document.querySelectorAll("#" + id + ", [for=" + id + "]")].forEach(function(ele) {
ele.closest("tr").style.display = "none";
})
<table>
<tbody>
<tr>
<td>
<div class="csLabel">
<label for="common_id1">Label</label>
</div>
</td>
</tr>
<tr>
<td>
<div class="csFields">
<select id="common_id1" name="someName">
<option value="">some options...</option>
</select>
</div>
</td>
</tr>
<tr>
<td>
<div class="csLabel">
<label for="common_id2">Label</label>
</div>
</td>
</tr>
<tr>
<td>
<div class="csFields">
<select id="common_id2" name="someName">
<option value="">some options...</option>
</select>
</div>
</td>
</tr>
</tbody>
</table>
答案 1 :(得分:1)
也许是在加载时执行此操作,那么以后需要做的事情会容易得多。
const child = document.querySelectorAll('label[for="common_id1"]')
child.forEach(node => node.parentNode.parentNode.data('targetId', node.id))