【发布时间】:2018-06-25 15:05:29
【问题描述】:
我从香草 JS 开始,所以不要生气 ;) 尝试编写井字游戏。
我有这个 HTML:
<div class="container">
<div class="row">
<div class="cel empty" id="a1">
<p>x</p>
</div>
<div class="cel empty" id="a2">
x
</div>
<div class="cel empty" id="a3">
x
</div>
</div>
<div class="row">
<div class="cel empty" id="b1"> x</div>
<div class="cel empty" id="b2"> x</div>
<div class="cel empty" id="b3"> x</div>
</div>
<div class="row">
<div class="cel empty" id="c1"> x</div>
<div class="cel empty" id="c2"> x</div>
<div class="cel empty" id="c3">x </div>
</div>
</div>
还有这个JS:
var fieldEmptyElements = document.querySelectorAll('div.cel');//pobieram divy które zawierają klasę empty
window.addEventListener('load', checkHowManyEmpty);//po załadowaniu strony wczytuje funkcję o nazwie checkHowManyEmpty
//funkcja ma za zadanie sprawdzić jak dużo pól div ma klasę empty
function checkHowManyEmpty(){
for(var i=0, max=fieldEmptyElements.length; i<max; i++){
if(fieldEmptyElements.classList.contains('empty')){
alert('there is one element with empty class');
}
else{
alert('no element with empty class');
}
}
}
函数需要检查是否有任何元素具有 EMPTY 类 - 但控制台给了我这个:“未捕获的类型错误:无法读取未定义的属性 'contains' 在 checkHowManyEmpty”。知道为什么吗?
【问题讨论】:
-
fieldEmptyElements 是一个NodeList,使用
fieldEmptyElements[i].classList.contains(..)。 -
为什么要在循环中自己执行检查,而不是让选择器引擎完成工作?无论如何,这就是它的优化目标。
document.querySelectorAll('div.cel.empty').length将在一个干净简单的方法调用中告诉您在div.cell元素中是否有empty类的元素... -
@Cbroe - 但是当我编写这个函数时:
function checkHowManyEmpty(){ var fieldEmptyElements = document.querySelectorAll('div.cel.empty'); if(fieldEmptyElements.length >= 1){ console.log('at least one element'); } else if(fieldEmptyElements.length = 0){ console.log('no empty elements'); } }它会告诉我console.log 中是否有类为空的元素,但当没有这个类的元素时不会显示...... -
else if(fieldEmptyElements.length = 0)- 这是一个任务; comparison 运算符是==...但是为什么你还需要一个 else-if 呢?如果长度不是>= 1,那么它一定是0……它不能变成负数。 -
@CBroe 是啊!在您回答之前,我看到了这个错误几秒钟:D 无论如何,当您使用比较时它会起作用!我使用它是因为我正在学习,这种符号更好地记住什么是什么;)谢谢!
标签: javascript html css contains