2011-02-05 35 views
0

我正在使用jQuery并创建现在的搜索。我想改变搜索匹配的所有单词。在搜索结果中选择js的单词

例如:

我在文本框中输入“世界你好”,剧本得到网页上的所有单词“你好”和“世界”和替换它的“<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类是学校最好的类”,它破坏页面结构

+0

你说的“页”,你在一个DIV或P元素的意思,或确实意味着“在页面上的整个HTML中的任何地方?第一个很容易,后者更困难。相关HTML的列表将对人们回答这个问题很有用。” – Neil 2011-02-05 14:51:49

回答

2

啊好吧,我明白了 “的onpage” 搜索... HM ....

这是How do I select text nodes with jQuery?

01副本
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>")); 
}); 

遍历所有这些,APLY先前写入我的过滤器。

有哪里找到你的话,你必须选择整个文本,并替换找到的字与找到字

+0

几乎是,但不是真的 – Mirgorod 2011-02-05 14:20:40