如何使用jQuery选择特定字符后段内的所有文本

时间:2011-04-19 18:44:18

标签: javascript jquery

我想使用jQuery查找特定字符,在这种情况下,在一个或多个段落中使用“#”,删除该字符,然后在span标记中包装所有内容。

这是HTML示例:

<p>Lorem ipsum dolor sit amet # consectetur adipiscing elit<p>

jQuery应该将上面的代码转换成这个:

<p>Lorem ipsum dolor sit amet <span>consectetur adipiscing elit</span></p>

我已经花了几个小时就已经知道了,我知道解决方案应该相对简单,但我找不到它。有没有jQuery大师愿意帮忙?谢谢!

4 个答案:

答案 0 :(得分:4)

以下是 working jsFiddle demo

<强> HTML:

<p>Lorem ipsum dolor sit amet # consectetur adipiscing elit</p>

<强> jQuery的:

$("p:contains('#')").each(function() {

   var $this = $(this),
       splitText = $this.text().split("#"),
       formattedText = splitText[0] + "<span>" + splitText[1] + "</span>";

   $this.html(formattedText);

});

- 如果您想要多次出现嵌套跨度: -

使用此 working jsFiddle demo

<强> HTML:

<p>Lorem ip#sum dolor sit amet # consectetur adip#iscing elit</p>

<强> jQuery的:

$("p:contains('#')").each(function() {

   var $this = $(this),
       thisText = $this.text(),
       numberOfOccurrences = thisText.split("#").length,
       formattedText = thisText.replace(/\#/g, "<span>");

    for (var i = 1; i < numberOfOccurrences; i++) { formattedText += "</span>"; }

    $this.html(formattedText);

});

更新备注:

  • 多次出现jsFiddle已更新,删除了额外的var splitText,因为这是不必要的。
  • 多次出现jsFiddle已被移动并且css已更新以直观显示跨度。

答案 1 :(得分:2)

像这样的东西

$("p:contains('#')").each(function () {
   var $this = $(this);
   var thisText = $(this).text().split("#");
   $this.html(thisText[0] + "<span>" + thisText[1] + "</span>";
});

答案 2 :(得分:1)

这应该有效:

$("p").each(function(){
var text = $(this).text().split("|"); 
$(this).html(""); 
var final = text[0] + "<span>" + text[1] + "</span>"; $(this).html(final);
});

答案 3 :(得分:1)

Here's an example of the following →

$('p').each(function(i,elem){
    var $this = $(this),
        tStr = $this.text(),
        res = tStr.replace(/(^.*)(\#.*$)/, '$1<span>$2</span>').replace('#','');

    $this.html(res);
});