我知道有些话题几乎涉及同一个主题,但我找不到一个能帮助我实现我所需要的。
我有一些文字标点符号和超文本标记语言
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean semper elit efficitur tempus sagittis. Vivamus at eros — quis velit ornare consequat. Vestibulum suscipit erat enim; sed bibendum augue interdum at.</p>
<p>Sed vulputate ipsum id ullamcorper vehicula. Ut ac ornare risus, id vehicula justo. Quisque pretium, lectus "et rutrum fermentum", leo mauris interdum eros, nec blandit nibh dolor nec enim.</p>
我想做的是用一个包含每个单词和标点符号
所以输出应该是
<p><span>Lorem</span> <span>ipsum</span> <span>sit</span> <span>sit</span> <span>amet</span><span>,</span> (etc...)
到目前为止,我已经成功地用空格分隔,并用
提前谢谢!
编辑:
以下是我迄今为止使用的代码(如您所见,要拆分的文本位于div
元素中,带有id=textarea
:
$('#textarea').each(function(){
var text = $(this).html().split(" "),
len = text.length,
result = [];
for( var i = 0; i < len; i++ ) {
result[i] = '<span class="clickable">' + text[i] + '</span>';
}
$(this).html(result.join(' '));
});
您正在使用jQuery吗?如果是这样,您可以使用相当轻松地完成此操作。text()
以解决标记和语法问题。
http://jsfiddle.net/r6dz97ud/
$("p").each(function(i, p) {
var words = $(p).text()
$(p).html("")
$(words.split(" ")).each(function(j, word) {
var span = $("<span></span>")
span.html(word)
$(p).append(span).append(" ")
});
});
以下是对任何html字符串值执行此操作的一般解决方案:
var tagsexpr = "(\\<\\w+\\>)|(\\<\\/\\w+\\>)";
var wordexpr = "[^\\<?\\/|>| ]\\w+";
var puncexpr = "[\\.,\\?\\!]";
function wrap(text) {
var tags = text.match(new RegExp(tagsexpr, 'g'));
var words = text.match(new RegExp(wordexpr + '|' + puncexpr, 'g'));
return tags[0] + words.reduce(function (base, curr, indx) {
return (new RegExp(puncexpr, 'g')).test(words[indx + 1]) ?
base + '<span>' + words[indx] + '</span>' : base + '<span>' + words[indx] + '</span> ';
}, '').trim() + tags[1];
}
console.log(wrap('<p>hello from the matrix.</p>'));
// => "<p><span>hello</span> <span>from</span> <span>the</span> <span>matrix</span><span>.</span></p>"