【问题标题】:How can I highlight search results live with JavaScript?如何使用 JavaScript 实时突出显示搜索结果?
【发布时间】:2022-01-10 17:49:56
【问题描述】:

我正在尝试找到一种方法来在用户在输入字段中输入搜索词时实时突出显示搜索结果。搜索的目标是一个无序列表。我正在尝试使用正则表达式来突出显示匹配项,但是当我尝试用突出显示的版本替换结果时,我得到一个未定义的类型错误:

"Cannot read properties of undefined (reading 'replace')"

我知道错误出现在 displayMatches 函数的最后一行,但我不知道正确的语法。有人可以帮忙吗?

这是 HTML:

         <ul>
            <li>item 1</li>
            <li>item 2</li>
            <li>item 3</li>
            <li>item 4</li>
            <li>item 5</li>
            <li>item 6</li>
            <li>item 7</li>
            <li>item 8</li>
            <li>item 9</li>
           <li>item 10</li>
        </ul>
      
     
        <input id="search" type="text">

JavaScript:

let searchBar = document.getElementById("search");

const displayMatches = () => {
let userInput = document.getElementById("search").value;
let target = document.getElementsByTagName("li");
let regex = new RegExp(`${userInput}`, 'g');
target.innerHTML = target.innerText.replace(regex, match => `<mark>${match}</mark>`);
}

searchBar.addEventListener('keyup', displayMatches);

【问题讨论】:

  • getElementsByTagName 是一个 HTML 集合!

标签: javascript regex search replace highlight


【解决方案1】:

错误是target.innerHTMLtarget.innerText

您从document.getElementsByTagName("li") 获得了target。此语句返回一个包含所有 li 元素的数组。但是innerHTMLinnerText 属性不能处理数组,它们只能处理单个元素,所以你必须遍历你的lis:

for (i = 0; i < target.length; i++) {
    target[i].innerHTML = target[i].innerText.replace(regex, match => `<mark>${match}</mark>`);
}

【讨论】:

  • 只有一件事,如果 - 并且只有 - 我的回答对你有帮助,你能接受它作为最佳答案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-14
相关资源
最近更新 更多