一尘不染

HTML中的全文搜索,忽略标签/&

javascript

我最近看到了很多用于在HTML页面中搜索和突出显示术语的库。但是,我看到的每个库都存在相同的问题,它们找不到部分用html标记封装的文本,并且/或者找不到包含&表示的特殊字符。


示例a:

<span> This is a test. This is a <b>test</b> too</span>

搜索“测试”将找到第一个实例,但找不到第二个实例。


示例b:

<span> Pencils in spanish are called l&aacute;pices</span>

搜索“lápices”或“ lapices”将不会产生结果。


有没有这样做的JS库,或者至少是一种避免这些障碍的方法?

提前致谢!


阅读 405

收藏
2020-05-01

共1个答案

一尘不染

您可以window.find()在非IE浏览器中使用,也可以在IE中使用TextRangefindText()方法。这是一个例子:

不幸的是,在版本15中切换到Blink渲染引擎之前的Opera不支持window.findTextRange。如果您对此感到担忧,那么一个更重量级的选择是结合使用我的Rangy库的TextRange和CSS类应用程序模块

码:

function doSearch(text) {
    if (window.find && window.getSelection) {
        document.designMode = "on";
        var sel = window.getSelection();
        sel.collapse(document.body, 0);

        while (window.find(text)) {
            document.execCommand("HiliteColor", false, "yellow");
            sel.collapseToEnd();
        }
        document.designMode = "off";
    } else if (document.body.createTextRange) {
        var textRange = document.body.createTextRange();
        while (textRange.findText(text)) {
            textRange.execCommand("BackColor", false, "yellow");
            textRange.collapse(false);
        }
    }
}
2020-05-01