【问题标题】:Find text by search and highlight gets error通过搜索查找文本并突出显示错误
【发布时间】:2016-09-16 16:26:08
【问题描述】:

在搜索文本时,它会找到并突出显示正确的文本,但会清除其他元素,例如 <p><ul><b><strong>。所有元素都被删除/清理!

HTML

<div class="ray-search">
  <div class="field" id="ray-search-form">
    <input type="text" id="searchfor" placeholder="what are you searching for?" />
    <button type="button" id="search">Press to Find!</button>
  </div>
</div>

<article id="ray-all_text">
  <p>
    This manual and web site, all information and data and photos contained herein, are the s...
  </p>
</article>

JS

setTimeout(function() {
  $('button#search').click(function() {
    var page = $('#ray-all_text');
    var pageText = page.text().replace("<span>", "").replace("</span>");
    var searchedText = $('#searchfor').val();
    var theRegEx = new RegExp("(" + searchedText + ")", "igm");
    var newHtml = pageText.replace(theRegEx, "<span>$1</span>");

    page.html(newHtml);
    $('html, body').animate({
      scrollTop: $("#ray-all_text span").offset().top
    }, 2000);
  });
}, 1000);

请查看 JSFiddle 示例:https://jsfiddle.net/8snb3o4h
为什么会这样?有解决办法吗?

【问题讨论】:

  • Aariba,使用innerHTML.html() 与 jQuery)是邪恶的,因为它会破坏事件并触发 DOM 的再生。避免使用它,否则您会遇到问题。相反,您可以使用mark.js。可以在 here! 找到一个带有 mark.js 的示例和您的用例

标签: javascript jquery html regex


【解决方案1】:

text() 去除所有标记。 html() 将保持原样。

变化:

var pageText = page.text().replace("<span>", "").replace("</span>");

var pageText = page.html().replace("<span>", "").replace("</span>");

更新小提琴:https://jsfiddle.net/gaezs6s8/

text()

获取匹配元素集合中每个元素的组合文本内容,包括它们的后代,或者设置匹配元素的文本内容。

html()

获取匹配元素集中第一个元素的 HTML 内容或设置每个匹配元素的 HTML 内容。

【讨论】:

  • 太棒了!如果你不介意你能问一个类似的问题吗?当我搜索它时,一键显示一个结果,我想在第二次单击时找到相同的文本。
  • 每次我点击按查找时,它都会突出显示另一个?
猜你喜欢
  • 2017-02-14
  • 2017-02-03
  • 1970-01-01
  • 2022-10-07
  • 2022-07-28
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
相关资源
最近更新 更多