下面有一个表
<table class = "gridHover">
<thead>
<tr>
<td colspan="2">
<label for="searchbox">Search:</label>
<input type="text" id="searchbox" />
</td>
</tr>
</thead>
<tbody>
<tr>
<td>Something</td>
<td>More text</td>
</tr>
<tr>
<td>Lorem ipsum</td>
<td>blah?</td>
</tr>
<tr>
<td>Test ipsum</td>
<td>Test?</td>
</tr>
</tbody>
我有一个文本框,我在其中输入文本,然后它突出显示表格中的文本。我的jquery代码如下
$(document).ready(
function(){
$('#searchbox').keyup(
function(){
var searchText = $(this).val();
if (searchText.length > 0){
$('td:contains(' + searchText +')')
.addClass('searchResult');
$('td:not(:contains('+searchText+'))')
.removeClass('searchResult');
}
else if (searchText.length == 0) {
$('td.searchResult')
.removeClass('searchResult');
}
});
});
这里是我的小提琴的链接,使它更清楚和复制问题。
如果你输入文本,你可以看到它只会突出显示第二行即奇数行的文本。这是因为我在
下面有一个css规则 .gridHover tbody tr:nth-child(odd) td, .gridHover tbody tr:nth-child(odd) th {
background-color: #f9f9f9;
我想保留这个css规则,但仍然想突出显示与文本匹配的行。我该怎么做呢?
您受到CSS专一性的影响 - tr:odd
样式中更具体的规则覆盖了.searchResult
样式。
你可以改变你的.searchResult
风格,使它也引用至少相同的总匹配规则的tr:odd
风格,例如:
.gridHover tbody tr td.searchResult {
background-color: #ffa;
}
这比.gridHover tbody tr:nth-child(odd) td
更具体。
有了这个规则,您还可以删除现有的td.searchResult
规则,因为它被上面的规则覆盖。
我更新了小提琴
只添加你需要的类奇数(td,th)
并增加了不区分大小写请看这个链接js:
jQuery.expr[':'].Contains = function(a, i, m) {
return jQuery(a).text().toUpperCase()
.indexOf(m[3].toUpperCase()) >= 0;
};
jQuery.expr[':'].contains = function(a, i, m) {
return jQuery(a).text().toUpperCase()
.indexOf(m[3].toUpperCase()) >= 0;
};
css: td {
border: 1px solid #000;
padding: 0.4em 1em;
}
td.searchResult {
background-color: #ffa;
}
.gridHover tbody {
cursor: default;
}
.gridHover tbody tr:hover td,.gridHover tbody tr:hover th {
background-color: #fafad2;
}
.gridHover tbody tr:nth-child(odd) td, .gridHover tbody tr:nth-child(odd) th {
background-color: #f9f9f9;
}
.gridHover tbody tr:nth-child(odd) td.searchResult, .gridHover tbody tr:nth- child(odd) th.searchResult {
background-color: #ffa;
}
.head td
{
background-color: white;
}