【问题标题】:Select words by js in search result通过js在搜索结果中选择单词
【发布时间】:2011-02-06 03:24:35
【问题描述】:

我正在使用 jQuery 并创建现在搜索。我想更改所有匹配搜索的单词。

例如:

我在文本框中输入“hello world”,脚本获取页面上的所有单词“hello”和“world”并将其替换为“<b class="search_word">hello</b>”和“<b class="search_word">word</b>”。

有可能吗?

PS。

在 div 中搜索,但 div 包含许多其他 html 元素。

现在我正在使用这个:

if ($("#search_input").val() != "") {
    var words = $("#search_input").val().split(/\s/g)
    for (var i = 0; i < words.length; i++) {
        var new_reg = new RegExp(words[i], 'gi');
        var replaced = $(".content_area").html().replace(new_reg, "<b class='searched_word'>"+words[i]+"</b>")
        $(".content_area").html(replaced);
    }
}

它可以工作,但标签...

如果我搜索类似:“b 类是学校里最好的类”,它会破坏页面结构

【问题讨论】:

  • 您说“在页面上”,是指在单个 DIV 或 P 元素中,还是真正的意思是“在页面上整个 HTML 的任何位置?第一个很容易,后者更多很难。相关 HTML 的列表将有助于人们回答这个问题。

标签: javascript jquery search


【解决方案1】:

啊,好吧,我明白了,“页面”搜索...嗯....

这是来自How do I select text nodes with jQuery?的副本

var getTextNodesIn = (function() {
    function textNodeFilter() {
        return this.nodeType == 3;
    }

    return function(el) {
        var $el = $(el);
        return $el
            .contents()
            .filter(textNodeFilter)
            .add(
                $el
                   .find("*")
                   .contents()
                   .filter(textNodeFilter)
            );
    };
})();

你现在可以使用

getTextNodesIn("body").each(function() {
 var txt = $(this).text();
 $(this).text(txt.replace(new RegExp(myWord,"g"), "<b>" + myWord + "</b>"));
});

现在遍历所有这些并应用我之前编写的过滤器。

在你找到你的单词的地方,你必须选择整个文本,并将找到的单词替换为 found Word

【讨论】:

  • Aham,看看这个 var 已替换 = $(".content_area").html().replace(/Наверняка/, "!!!") $(".content_area").html(替换);我如何更新它以不仅替换第一个单词,而且替换每个单词?
  • 请看我的更新。请不要使用“html”,因为它也会搜索 html,并且不要用您的新 html 替换整个内容区域,因为您可能会破坏事件绑定。总是只有文本,总是只能被它的父容器替换
  • 这个 $(this).text(txt.replace(new RegExp(myWord,"g"), "" + myWord + "")) 有问题行
  • 正如我上面所说的,Luke 也是如此,如果没有相关 HTML 的列表,就很难为您提供帮助!
猜你喜欢
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
  • 1970-01-01
  • 2018-07-19
  • 1970-01-01
  • 2022-12-17
  • 2013-04-02
  • 1970-01-01
相关资源
最近更新 更多