在Jquery中,如何将段落文本的一部分包含在span中

时间:2011-09-15 10:06:22

标签: javascript jquery html

如何在span中的段落中包含span后面的innerhtml。通过例子更好地解释:

<p>foo <span>bar</span> baz</p>

我想得到:

<p>foo <span>bar</span><span> baz</span></p>

baz也可以标记(即可以包含链接等)。

我试过

$(p span).first().contents().filter(function() {
    return this.nodeType == 3;
}).text();

但只给了我第一个跨度的内跨文本......

3 个答案:

答案 0 :(得分:7)

DEMO

var span = $('p > span:first')[0];
var target = [];
while(span.nextSibling) {
    target.push(span.nextSibling);
    span = span.nextSibling;
}
$(target).wrapAll('<span />');

答案 1 :(得分:2)

这可能有效

$('<span>').insertAfter('span')
$('</span>').appendTo('p')

你当然希望更具体地针对你的目标。

答案 2 :(得分:0)

感谢您的帮助@Sahil Muthoo,@ Saul和@puppybeard,遗憾的是我无法得到你建议的答案,所以最后我想出了这个,虽然看起来有点过头了,但对我的情况有用。

在jsFiddle上查看 live demo

var p = $('p').clone();
p.children('span').first().replaceWith('[split]');
var aParts = p.html().split('[split]');
var newP = $('<p>').text(aParts[0]).append($('p').children('span').first());
if (aParts.length > 1) {
    newP.append($('<span>').html(aParts[1]));
}       
$('p').replaceWith(newP);

建议清理上述混乱局面。