如何使用 jQuery 突出显示 RegEx 匹配项?

Posted

技术标签:

【中文标题】如何使用 jQuery 突出显示 RegEx 匹配项?【英文标题】:How to highlight RegEx matches with jQuery? 【发布时间】:2012-12-09 01:14:42 【问题描述】:

以代码为基础,是否可以在不使用额外插件的情况下突出显示任何匹配项?

我想将style="backgorund: green;" 添加到找到项目的 div 中,以便我可以立即看到它们。

到目前为止我尝试过的事情都没有奏效,所以我希望一些来自我大脑之外的新想法会起到作用。

function finder(items)
    var needed = [
         /* items */
    ];
    var re = new RegExp(needed.join("|"), "i");
    return(items.match(re) != null);


var found = finder(document.body.innerhtml);
var output = found ? "found" : "not found";

if(output == 'found') 
    //highlight found array item

【问题讨论】:

相关:我最近做了类似的事情:github.com/Ralt/regexfiddle 您想将样式添加到包含文本的 div 中,还是在找到的文本周围创建一个跨度以仅突出显示它? @FlorianMargaine 我想将样式添加到包含查找的元素,而不是在其周围创建新元素。现在将查看到目前为止给出的答案,看看是否已经有我可以使用的东西。 【参考方案1】:

使用innerHTML 是邪恶的,因为它会一次又一次地替换事件并触发 DOM 的生成。我建议使用现有的插件,因为你会遇到更多的陷阱。查看mark.js 以突出显示自定义正则表达式。

【讨论】:

【参考方案2】:

我稍微改变了我的代码并解决了这个问题:

function finder(items)
    var needed = [
         /* items */
    ];
    var reg = new RegExp(needed.join("|"), "i");
    var found = (textToCheck.match(reg) != null);
    var foundItem = textToCheck.match(reg);
    return [found,foundItem];


var found = finder(document.body.innerHTML)[0];
var foundItem = finder(document.body.innerHTML)[1];

if(found === true) 
    $('div:contains('+foundItem+')').css("background", "greenyellow");

【讨论】:

【参考方案3】:

你可以试试用 replace()

for (var i = 0; i < needed.length; i++) 
    var word = needed[i];
    document.body.innerHTML = document.body.innerHTML.replace(word, '<span style="background: #00ff00">' + word + '</span>');

在这里试试:http://jsfiddle.net/4kjuw/

【讨论】:

当我打开你的小提琴时,我会收到各种奇怪的警报。此外,替换并不是我的想法,因为我想为父元素设置样式,而不是在文本周围添加跨度。非常感谢您尝试提供帮助。【参考方案4】:

为什么要重新发明***?有现成的解决方案。例如,试试this plugin。这是插件的source code。它实际上是几行代码,所以如果您真的想编写自己的高亮引擎,您可以对其进行分析以了解高亮是如何执行的。

【讨论】:

我之前已经看过不少插件,但都没有我需要的,这就是我要求直接代码的原因。看看你链接的来源,不是我一直在寻找的。非常感谢您尝试提供帮助!

以上是关于如何使用 jQuery 突出显示 RegEx 匹配项?的主要内容,如果未能解决你的问题,请参考以下文章

基于正则表达式在闪亮的 DT 中突出显示单词

如何使用 Jquery 突出显示 svg 地图?

如何使用传单和 jQuery Birdseye 在点击时突出显示标记

jQuery 插件 DataTables:如何突出显示当前搜索文本?

如何使用jquery根据文本突出显示表格列?

JQuery DatePicker,如何突出显示当前输入的日期?