检查第(n)个元素是否包含类名
check if (n)th elements contain class name
如何检查前3个li元素是否包含类yes?然后,执行一个函数。只有香草Js,没有jquery。
<ul>
<li class="yes">blah blah</li>
<li class="yes">blah blah</li>
<li class="yes">blah blah</li>
<li class="no">blah blah</li>
<li class="no">blah blah</li>
<li class="yes">blah blah</li>
<li class="yes">blah blah</li>
</ul>
示例逻辑:
if (li[0] && li[1] && li[2] has class = yes) {
alert("You win!");
}
else{
alert("You lose!");
}
除了几个很棒的javascript解决方案外,我还将提出两个面向CSS的选项。
1)。第n个孩子。您可以使用:nth-child
尝试这种方法来选择前三个子项:
var li = document.querySelectorAll('ul li.yes:nth-child(-n+3)');
if (li.length === 3) {
// all three first elements has class "yes"
}
其思想是li.yes
将选择类为"yes"的元素,而:nth-child(-n+3)
确保返回的元素仅为前三个。结果是这两个条件的乘积。然后我们只需要检查返回的结果的长度是否为3。
演示:http://jsfiddle.net/b1oy0d6w/
2)。同级选择器。或者还有一个有点疯狂的版本,但使用同级选择器+
:会更短
if (document.querySelector('ul li.yes:first-child + .yes + .yes')) {
// all three first elements has class "yes"
}
这种方法背后的理念:
- li.yes:第一个子-检查第一个
li
是否具有类"yes" - 下一个元素具有类"yes"
- 第二个(即第三个)元素之后的下一个元素也具有类"yes"
仅当满足上述三个条件时,整个选择器ul li.yes:first-child + .yes + .yes
才返回第三个li
元素。
演示:http://jsfiddle.net/b1oy0d6w/1/
一种方法:
// storing an Array of the first three <li> elements returned by
// document.querySelectorAll():
var firstThree = [].slice.call(document.querySelectorAll('li'), 0, 3);
// logging whether or not every (using Array.prototype.every())
// Array element's classList contains the class of 'yes':
console.log(firstThree.every(function(el) {
return el.classList.contains('yes');
}));
var firstThree = [].slice.call(document.querySelectorAll('li'), 0, 3);
console.log(firstThree.every(function(el) {
return el.classList.contains('yes');
}));
<ul>
<li class="yes">blah blah</li>
<li class="yes">blah blah</li>
<li class="yes">blah blah</li>
<li class="no">blah blah</li>
<li class="no">blah blah</li>
<li class="yes">blah blah</li>
<li class="yes">blah blah</li>
</ul>
参考文献:
Array.prototype.every()
Array.prototype.slice()
- CCD_ 10
- CCD_ 11
不应该太难,试试:
var answer = true
var lis = document.querySelectorAll("ul > li") // Gets all the <lis> in all the uls
var classes = lis.map(function (e) {return e.className} //list of classnames
for (e in classes.splice(0,3)) { // runs a function on each of the first 3 elements
answer = (e == "yes") && answer // if any of the elements isnt "yes", answer will become false
}
if (answer) {
alert("You win!!!!!!!")
} else {
alert("You lose")
}
将id="ul"
添加到UL元素,然后运行:
var el=document.getElementById('ul');
var li=el.getElementsByTagName('li');
if(
/ yes /.test(' '+li[0].className+' ')&&
/ yes /.test(' '+li[1].className+' ')&&
/ yes /.test(' '+li[2].className+' ')
){
alert('you win');
}else{
alert("You lose!");
}
http://jsfiddle.net/k9sev1hq/
相关文章:
- javascript数组元素是否知道其封闭数组
- 如何检查元素是否在iframe中
- 检查元素是否将状态从隐藏更改为可见
- 确定元素是否存在
- 消隐数组元素是否生成自己的属性
- 检查一个元素是否有一个类与另一个类总是返回true
- 如何检查日期选择器和时间选择器元素是否使用JQuery/Javascript设置
- 如何查找具有该ID的元素是否存在
- 检查元素是否已单击或hasClass
- 使用webdriver和selenium验证元素是否不存在
- 如何使用jQuery实时检查元素是否为空
- html元素是否具有内置的属性
- 检查元素是否有内容
- 使用 javascript 检查元素是否包含子标记而不是文本
- JavaScript 在 JSON 对象中移动如何判断元素是否存在
- 检查两个或多个 DOM 元素是否重叠
- 谷歌地球插件 — 如何检查带有 ID 的元素是否已经存在
- 检查元素是否悬停在上面
- DOM 元素是否可以具有其值为任意对象(而不是字符串)的属性
- 如何检查DOM元素是否已完全加载