如果您有嵌套.TextCont
元素,这将避免出现问题。如果这不会发生,您可以摆脱not()
[docs]方法。
var with_dividers = $('.TextCont:contains("--divider--")')
.not('> .TextCont:contains("--divider--")');
with_dividers.html(function(i,htm) {
return '<p>' + htm.split('--divider--').join('</p><p>') + '</p>';
});
示例:http: //jsfiddle.net/CFLV4/
而且我将您的 ID 更改为类,因为重复的 ID 无效。
编辑:为了解释,在 JavaScript 中,您不附加开始和结束标记。您需要从处理整个元素的角度进行思考。
在上面的代码中,html()
[docs]方法被传递了一个函数。函数的返回值是元素的新内容。htm
参数传递的是当前内容的字符串。
所以我们要做的是获取现有内容,然后执行 a .split('--divider--')
,得到一个数组,例如:
['<span>Lorem</span>',
'<a href="#">ipsum</a>',
'dolor sit amet.'
]
如您所见,--divider--
文本已被删除,字符串在原处拆分--divider--
。
然后我们.join()
在数组上做一个,使用'</p><p>'
作为连接文本,给我们:
'<span>Lorem</span></p><p><a href="#">ipsum</a></p><p>dolor sit amet.'
...但当然我们缺少我们的开始和结束标签,所以我们将它们添加到开始和结束,所以我们的代码:
'<p>' + htm.split('--divider--').join('</p><p>') + '</p>'
...最终给了我们:
'<p><span>Lorem</span></p><p><a href="#">ipsum</a></p><p>dolor sit amet.</p>'
那是函数的返回值,因此成为新的内容。