javascript - 如何使用下面的代码突出显示搜索?
问题描述
下面的代码已经在 li 之间进行了字母搜索。我想强调研究中的字母 li。是否可以使用下面的代码?
<input type="search" id="catInput">
<ul id="myUl">
<li>Hello</li>
<li>Test</li>
<li>Javascript</li>
</ul>
<span id="total"></span>
<script>
var ip = document.getElementById('catInput');
var ul = document.getElementById('myUl');
var li = ul.getElementsByTagName('li');
document.getElementById('total').innerHTML = "" + (li.length) + "";
ip.addEventListener('input', function() {
var val = this.value.toUpperCase(), idx = 0;
for (var i = 0; i < li.length; i++) {
var txt = li[i].textContent.toUpperCase();
if (txt.indexOf(val) != -1) {
li[i].style.display = '';
idx++;
} else {
li[i].style.display = 'none';
}
if (idx == 0) {
document.getElementById('total').innerHTML = "No results";
}else{
document.getElementById('total').innerHTML = idx;
}
}
});
</script>
解决方案
在条件中添加此代码if (textIndex != -1) {}
,它将mark
标记添加到匹配的输入中:
const rgxVal = `(${val})`;
const rgx = new RegExp(rgxVal, 'gi');
li[i].innerHTML = txt.replace(rgx, `<mark>$1</mark>`);
我还删除toUpperCase()
了它txt
,val
并且仅在测试匹配时才添加它:
const textIndex = txt.toUpperCase().indexOf(val.toUpperCase());
if (textIndex != -1) {
...
演示:
var ip = document.getElementById('catInput');
var ul = document.getElementById('myUl');
var li = ul.getElementsByTagName('li');
document.getElementById('total').innerHTML = "" + (li.length) + "";
ip.addEventListener('input', function() {
var val = this.value, idx = 0;
for (var i = 0; i < li.length; i++) {
var txt = li[i].textContent;
if(val) {
var textIndex = txt.toUpperCase().indexOf(val.toUpperCase());
if (textIndex != -1) {
li[i].style.display = '';
const rgxVal = `(${val})`;
const rgx = new RegExp(rgxVal, 'gi');
li[i].innerHTML = txt.replace(rgx, `<mark>$1</mark>`);
idx++;
} else {
li[i].style.display = 'none';
}
} else {
idx = 3;
li[i].style.display = '';
li[i].innerHTML = txt;
}
}
if (idx == 0) {
document.getElementById('total').innerHTML = "No results";
} else{
document.getElementById('total').innerHTML = idx;
}
});
<input type="search" id="catInput">
<ul id="myUl">
<li>Hello</li>
<li>Test</li>
<li>Javascript</li>
</ul>
<span id="total"></span>
推荐阅读
- javascript - JavaScript:当数组为空时解构对象数组时出错
- extjs - ExtJs:为什么 numberfield 在显示数据时会自动将 null 转换为 0
- php - 为什么 PHP 会在输入时删除文件的内容?
- sql - 将字符串转换为时间戳并在 BigQuery SQL 中使用 timestamp_diff
- ansible - 如何在 ansible 查找模块中使用模式、年龄、年龄标记选项
- ios - iOS 12.4.1 发布在苹果商店拒绝 ipad 设备时崩溃
- visual-studio-2012 - VSCode 中的权限被拒绝(公钥)
- css - Angular Material datepicker上的占位符左边距/填充?
- android - 无法使用 Xamarin.UITest 截屏
- c++ - C++ 如何防止 Winapi::FreeLibrary 删除变量?