Каков наилучший подход для поиска текста в теле HTML - PullRequest
5 голосов
/ 26 ноября 2011

На данный момент я использую метод поиска javascript для замены некоторого текста в теле 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и ТЕЛО, а также .. Но здесь я хочу найти текст HTML, а не родительский элемент ... Спасибо

Ответы [ 4 ]

6 голосов
/ 26 ноября 2011

Вы должны взглянуть на:

диапазоны: (для изменения текста без перезаписи всего тела)

IE: http://msdn.microsoft.com/en-us/library/ms535872%28v=vs.85%29.aspx
Другие: https://developer.mozilla.org/en/DOM/range


find () / findText () (для создания диапазонов)

IE: http://msdn.microsoft.com/en-us/library/ms536422%28v=vs.85%29.aspx
Другие: https://developer.mozilla.org/en/DOM/window.find

(Opera не поддерживает поиск или поиск текста)


Относительно этого вопрос небольшая модификация:

<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>
1 голос
/ 26 ноября 2011

Я думаю, что ваш код работает хорошо, но ваша ошибка в том, что вы не поняли содержание "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);
});
1 голос
/ 26 ноября 2011

вы получите только те элементы, которые содержат полный текст
, не будучи родительскими для какого-либо другого элемента, который содержит тот же текст

var str = "some search text string";
var elements = $("*:contains('"+ str +"')").filter(
                  function(){
                      return $(this).find("*:contains('"+ str +"')").length == 0
                  }
               );
0 голосов
/ 26 ноября 2011

Попробуйте:

$(function() {
    var foundin = $('body:contains("some search text string")');
});

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...