javascript - :nth-child(even) 选择器按具有特定元素的类
问题描述
我有一张表,其偶数行为浅灰色背景,奇数行为白色。它通过使用 .tr:nth-child(even) {} 完美运行
HTML
<table>
<tr></tr>
<tr class="hidden"></tr>
<tr class="hidden"></tr>
<tr></tr>
</table>
CSS
tbody tr:nth-of-type(even) {
background-color: var(--bg);
}
我创建了一个搜索字段,通过为不匹配的元素添加hidden
类来过滤表行,之后它不起作用。tr
tr:nth-child(even)
我试图search-result
在匹配的元素上添加类,然后我做了tr:nth-of-type(even) { .... }
,也没有奏效。
有什么办法可以做到吗?例如,一种按类选择偶数元素的方法?
解决方案
使用我在底部的概念证明的变体修复了评论中的 codepen 版本。计数索引以检查是否偶数(不包括具有 display:none 的元素)每次更新都完成。这可能需要针对非常大的表进行优化。
function myFunction() {
var input, filter, table, tr, td, i, txtValue;
input = document.getElementById("input");
filter = input.value.toUpperCase();
table = document.getElementById("table");
tr = table.getElementsByTagName("tr");
for (i = 0; i < tr.length; i++) {
td = tr[i].getElementsByTagName("td")[0];
if (td) {
txtValue = td.textContent || td.innerText;
if (txtValue.toUpperCase().indexOf(filter) > -1) {
tr[i].style.display = "";
} else {
tr[i].style.display = "none";
}
}
}
//let table = document.getElementsByTagName('table')[0]
(function(){
let i = 0
table.querySelectorAll('tr:not(.hidden)').forEach(el =>
el.style.display !== 'none' && i++ % 2 === 0 ? el.classList.add('even') : el.classList.remove('even'))
})()
}
* {
box-sizing: border-box;
}
#input {
background-position: 10px 12px;
background-repeat: no-repeat;
width: 100%;
font-size: 16px;
padding: 12px 20px 12px 40px;
border: 1px solid #ddd;
margin-bottom: 12px;
}
#table {
list-style-type: none;
padding: 0;
margin: 0;
width: 100%;
}
#table tr {
border: 1px solid #ddd;
margin-top: -1px;
background-color: #fff;
padding: 12px;
text-decoration: none;
font-size: 18px;
color: black;
}
#table th, #table td {
text-align: left;
padding: 12px;
}
#table tr :not(td) {
background-color: #424242;
color: white;
}
#table tr:not(.even) {
background-color: #eee!important;
}
<input type="text" id="input" onkeyup="myFunction()" placeholder="Search for names.." title="Type in a name">
<table id="table">
<tr>
<th style="width:60%;">Name</th>
<th style="width:40%;">Age</th>
</tr>
<tr>
<td>Adam</td>
<td>22</td>
</tr>
<tr>
<td>malik</td>
<td>40</td>
</tr>
<tr>
<td>Asal</td>
<td>32</td>
</tr>
<tr>
<td>Asal</td>
<td>26</td>
</tr>
<tr>
<td>Asali</td>
<td>40</td>
</tr>
<tr>
<td>malik</td>
<td>40</td>
</tr>
<tr>
<td>maaaalik</td>
<td>40</td>
</tr>
</table>
选择非隐藏并使用计数器查找偶数。添加类。
let table = document.getElementsByTagName('table')[0]
let i = 0
table.querySelectorAll('tr:not(.hidden)').forEach(el =>
i++ % 2 === 0 && el.classList.add('even'))
.even {
background-color: red;
}
.hidden {
opacity: 0.2;
}
<table>
<tr>
<td>1</td>
</tr>
<tr class="hidden">
<td>2</td>
</tr>
<tr class="hidden">
<td>3</td>
</tr>
<tr>
<td>4</td>
</tr>
<tr>
<td>1</td>
</tr>
<tr class="hidden">
<td>2</td>
</tr>
<tr class="hidden">
<td>3</td>
</tr>
<tr>
<td>4</td>
</tr>
<tr>
<td>1</td>
</tr>
<tr>
<td>4</td>
</tr>
<tr class="hidden">
<td>2</td>
</tr>
<tr class="hidden">
<td>3</td>
</tr>
<tr>
<td>4</td>
</tr>
<tr class="hidden">
<td>2</td>
</tr>
<tr class="hidden">
<td>3</td>
</tr>
<tr>
<td>4</td>
</tr>
<tr>
<td>1</td>
</tr>
</table>
推荐阅读
- android - 无法在 Dagger 组件中使用自定义范围
- .htaccess - 为什么 .htaccess 重写规则需要确切的路径?
- android - 工作管理器android:将文件写入本地存储时UI被阻塞
- wpf - 异步 GetFiles 并写入 Sqlite 数据库
- vb.net - 嵌入式资源不适用于某些文件名?
- wordpress - 从 woocommerce 中的变量(客户余额)添加购物车费用
- javascript - React.memo:使用自定义函数比较 React 组件 props 的灵活性和效率
- javascript - message.guild.createRole 不起作用 - discord.js
- angular - 如何在 RadListView 中使用 ScollView
- python - 无法使用 boto3 列出存储桶中的所有对象,但可以使用 AWS CLI