53

I want to find a string of text in an element and wrap some span tags round it. E.g.

From:

<h2>We have cows on our farm</h2>

To:

<h2>We have <span class='smallcaps'>cows</span> on our farm</h2>

I've tried:

$("h2:contains('cow')").each(function() {
 $(this).text().wrap("<span class='smallcaps'></span>");
});

But that only wraps the whole containing h2 tag.

4

6 に答える 6

87
$("h2:contains('cow')").html(function(_, html) {
   return html.replace(/(cow)/g, '<span class="smallcaps">$1</span>');
});

http://jsfiddle.net/w5ze6/1/

于 2013-04-18T18:32:18.037 に答える
17

キーワードで分割し、更新された html と結合する別のアプローチ。

$("h2:contains('cow')").html(function(_, html) {
   return html.split('cow').join("<span class='smallcaps'>cow</span>");
});

注:私はこれをテストしていませんが、これは置換を行うよりもパフォーマンスが悪いと想定していますが、情報提供のためにとにかく含めると考えています

于 2013-04-18T18:31:04.150 に答える
1

私の場合、ターゲット div 内にいくつかのタグがあり、そのテキストをリンクにラップする必要があるテキストがあります。

これは、「何を試しましたか」に従って行った方法です。

var oldText = $(this).text(),
newText = $(this).html().replace(
    oldText, 
    "<a class='k-link' href='#' class='smallcaps'>" + 
        oldText + 
    "<span class='k-icon k-i-arrow-n'></span></a>"
);
$(this).html(newText);
于 2015-03-05T19:45:52.343 に答える
-1
$("h2:contains('cow')").each(function() {
    var newText = $(this).html().replace("cow", "<span class='smallcaps'></span>");
    $(this).html(newText);
});
于 2013-04-18T18:32:04.213 に答える