【问题标题】:Automatically Highlight Specific Word in Browser自动突出显示浏览器中的特定单词
【发布时间】:2016-06-18 16:45:59
【问题描述】:

在我的 chrome 扩展程序的内容脚本中,我试图注入代码以突出显示页面中的特定单词。

在这种情况下,我正在查看 espn.com,并希望在页面加载时立即在文本中突出显示所有“布莱恩特”实例。

这是我在查看了几个与我类似的问题后自定义的当前代码:

var all = document.getElementsByTagName("*");
highlight_words('Bryant', all);

function highlight_words(keywords, element) {
    if(keywords) {
        var textNodes;
        keywords = keywords.replace(/\W/g, '');
        var str = keywords.split(" ");
        $(str).each(function() {
            var term = this;
            var textNodes = $(element).contents().filter(function() { return this.nodeType === 3 });
            textNodes.each(function() {
                var content = $(this).text();
                var regex = new RegExp(term, "gi");
                content = content.replace(regex, '<span class="highlight">' + term + '</span>');
                $(this).replaceWith(content);
            });
        });
    }
}

在我的 jquery-ui.css 中,我有以下代码。我知道它现在没有突出显示,但我只是想获得概念证明:

.highlight {
    font-weight: bold;
}

此时一切都正常加载,但没有以粗体读取“bryant”的迭代。

谢谢!

【问题讨论】:

    标签: javascript google-chrome-extension highlight content-script


    【解决方案1】:

    执行此操作的最快方法是定义要搜索的突出显示内容,例如:

    您在网站上有 3 个部分,左侧的导航栏、顶部的标题和内容。

    让我们将.foo 类附加到文章中。

    var list = document.getElementsByClassName("foo")
    var search_word = ""
    var contents = []
    
    for(var i = 0; i < list.length; i++){
    var contents = list[i].textContext.split(search_word)
    list[i].textContext = contents.join('<span class="heighlight\">'+search_word+'</span>')
    }
    

    希望它会有所帮助。

    (高亮绑定到具有 .foo 类的元素)

    一些例子:https://jsfiddle.net/Danielduel/0842qntu/2/

    【讨论】:

    • 我刚刚执行了var list = document.getElementsByClassName("foo"); console.log(list);,它什么也没有记录...我猜我根本没有理解你的意思。你能详细说明吗?谢谢!
    • @Lance 你必须让这个元素包含一些内容,这是文档中具有 foo 类的元素数组。并且您必须在生成文档后运行此代码
    • 我希望它能够应用于任何网页,这就是我在最初尝试时尝试使用 * 通配符的原因。如何让它自动遍历任何 DOM、查看文本并在某些文本周围插入子节点?
    • 好的,感谢 JSFiddle。但是,在处理内容脚本时,我需要突出显示以符合任何页面;因此我不能为班级预先确定名称,因为每个页面都可能不同。如何让课程自动学习页面中的内容?
    • 然后加载 document.body 而不是特定元素
    猜你喜欢
    • 1970-01-01
    • 2019-06-24
    • 2014-03-08
    • 1970-01-01
    • 2015-01-10
    • 2013-07-31
    • 2021-06-28
    • 2020-10-11
    • 1970-01-01
    相关资源
    最近更新 更多