在body html中搜索某些文本的最佳方法是什么?

What is the best approach to search some text in body html

本文关键字:最佳 方法 是什么 文本 html body 搜索      更新时间:2023-09-26

到目前为止,我正在使用JavaScript搜索方法来替换body HTML中的一些文本,如下所示。

假设我的html是
 <body>
      <div> I am in body...</div>
 </body>

然后我使用下面的方法

 var body = $(body);
 var text = body.html();
 text = text.replace('I am in body...','Yes');
 body.html(text);

但是我发现像IE这样的浏览器页面搜索速度很慢。
请建议我改进这一点,也请让知道是否有任何插件搜索和匹配字符串,即使它包含任何html标签在它..像下面的

 <body>
       <div><span>I </span> am in body...</div>
 </body>

用当前的方法我不能匹配这个…
如果我使用

  $('*:contains("some search text string")'); 

这也将匹配DIV和BODY。但这里我想搜索的是html文本而不是父元素。由于

你应该看看:

ranges:(修改文本而不覆盖整个正文)

即:http://msdn.microsoft.com/en-us/library/ms535872%28v=vs.85%29.aspx
其他:https://developer.mozilla.org/en/DOM/range


find ()/findText () (创建范围)

即:http://msdn.microsoft.com/en-us/library/ms536422%28v=vs.85%29.aspx
其他:https://developer.mozilla.org/en/DOM/window.find

(Opera不支持find或findText)


关于的问题一个小修改:

<html>
<head>
  <script>
  function fx(a,b)
  {
    if(window.find)
    {
      while(window.find(a))
      {
        var rng=window.getSelection().getRangeAt(0);
        rng.deleteContents();
        rng.insertNode(document.createTextNode(b));
      }
    }
    else if(document.body.createTextRange)
    {
      var rng=document.body.createTextRange();
      while(rng.findText(a))
      {
        rng.pasteHTML(b);
      }
    }
  }
  </script>
</head>
<body onload="fx('I am in body...','Yes')">
<div>Oh <span>I </span>am in body...<i>, wonderful</i></div>
</body>
</html>

您将只获得包含全文的元素
而不是包含相同文本的其他元素的父元素

var str = "some search text string";
var elements = $("*:contains('"+ str +"')").filter(
                  function(){
                      return $(this).find("*:contains('"+ str +"')").length == 0
                  }
               );

我认为你的代码工作得很好,但你的错误是你没有弄清楚"body"的内容。

这是你的代码:

$(document).ready(function(){
    var body = $("body");    // your miss this
    var text = body.html();
    text = text.replace('I am in body...','Yes');
    body.html(text);
});

试试这个:

<>之前$(函数(){Var foundin = $('body:contains("一些搜索文本字符串")');});之前

希望有所帮助