0

誰かが私のサイトで何かを検索した後、結果のリストで検索された用語を強調表示します。

たとえば、「Lorem」を検索すると、結果の 1 つとして「Lorem ipsum dolor sit amet」というタイトルの記事が表示されます。この場合、「Lorem」が強調表示されます。通常のフォントであること。

私の機能は現在これです:

function highlightSearchedTerm(term) {
      var regex = new RegExp('('+term+')', 'gi');
      $('.markable').each(function(){
         var content = $(this).html();
         var replaced = content.replace(regex, "<span class=\"highlight\">$1</span>");
         $(this).html(replaced);
      });
   }

問題は、記事のテキストにリンクや画像などの HTML コードが含まれている可能性があることです。そのため、誰かが「クリック」を検索すると、リンクの onclick 属性が置き換えられ、リンク内のスパンが取得されます。

お気に入り

<a href="http://www.example.com" onclick="window.open(this.href);return false;">link</a>

交換され、私は取得します

<a href="http://www.example.com" on<span class="highlight">click</span>="window.open(this.href);return false;">link</a>

これは悪いことです。

どうすればそれを回避できますか?

4

1 に答える 1

4

を使用する代わりに、テキスト ノード.html()反復 (およびテキストを置換) します。

于 2013-03-25T20:08:40.287 に答える