我想实现的是这样的。
这是我的CSS代码。
<style type="text/css">
.hideout {
display: none;
}
</style>
这是我的JavaScript代码
<script type="text/javascript">
var listElements = document.querySelectorAll('.list');
var mapElement = document.querySelectorAll('.map');
listElements.forEach(element => {
if (element.innerHTML == "NoMap") {
mapElement.classList.add('hideout');
}
});
我上面的代码是无效的 我已经想好了,添加索引就可以了。
mapElement[0].classList.add('hideout');
这种情况下,我如何应用for循环?
你可以抓取所有有类的DOM元素。map
儿女同堂 list
通过一个查询 (document.querySelectorAll('.list .map')
)
要处理元素文本 我会推荐 使用 .textContent
而不是 .innerHTML
.
所以,你可以做一些事情,像这样。
document.querySelectorAll('.list .map').forEach(e =>
e.textContent == 'noMap' && e.classList.add('hideout'))
.hideout {display:none;}
<ul class="list">
<li class="map">Map</li>
<li class="map">noMap</li>
</ul>
<ul class="list">
<li class="map">noMap</li>
<li class="map">Map</li>
</ul>
另一种选择:
let listElements = document.querySelectorAll('.map');
listElements.forEach(element => {
if (element.innerHTML == "noMap") {
element.classList.add("hideout");
}
});
或者:
let nodesSnapshot = document.evaluate('//ul[@class="list"]//li[@class="map"][.="noMap"]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
for ( var i=0 ; i < nodesSnapshot.snapshotLength; i++ )
{
nodesSnapshot.snapshotItem(i).classList.add("hideout");}
;