Jquery 将段落中的单词用span换行,保持嵌套链接正常运行
如何在保持任何嵌套链接正常运行的同时,将每个单词都用一个空格包装在一个段落中?使用下面的代码,我很接近,但是在空格上拆分会在Jquery 将段落中的单词用span换行,保持嵌套链接正常运行,jquery,split,html,Jquery,Split,Html,如何在保持任何嵌套链接正常运行的同时,将每个单词都用一个空格包装在一个段落中?使用下面的代码,我很接近,但是在空格上拆分会在a和href之间插入一个跨度,结果如下: <p><span><a< span> <span>href="#">this</span></a<></span></p> 这也许能更好地说明我的观点。谢谢 问题是您不希望在其他标记中随机插入“标记。如果您曾经
a
和href
之间插入一个跨度,结果如下:
<p><span><a< span> <span>href="#">this</span></a<></span></p>
这也许能更好地说明我的观点。谢谢 问题是您不希望在其他标记中随机插入
“
标记。如果您曾经得到过类似于:
的html,那么它将成为一个问题
您可以使用正则表达式来匹配HTML中的标记,并且只向所有其他内容添加
标记。可能并不完美,但有点像:
$('p').each(function() {
var tagRE = /([^<]*)(<(?:\"[^\"]*\"|'[^']*'|[^>'\"]*)*>)([^<]*)/g,
match,
result = [],
i = 0;
while(match = tagRE.exec($(this).html())) {
var text1 = match[1].split(/\s+/),
len1 = text1.length;
var text2 = match[3].split(/\s+/),
len2 = text2.length;
for(var tIdx = 0; tIdx < len1; tIdx++ )
result[i++] = '<span>' + text1[tIdx] + '</span>';
result[i++] = match[2];
for(var tIdx = 0; tIdx < len2; tIdx++ )
result[i++] = '<span>' + text2[tIdx] + '</span>';
}
$(this).html(result.join(' '));
});
$('p')。每个(函数(){
var tagRE=/([^)([^我认为最好使用.text()而不是.html()您可以使用,但我认为最终可能会有很多不必要的复杂性。制作一个单词解析器可以工作,并且可以构建它来检测
之后移动到字符,尽管这也可能会有问题。我认为这样做的结果可能类似于递归节点遍历器,它可能会所以要混乱。嗯。@RokoC.Buljan-我认为这是沿着以下思路:而且,我想象有人,在某个地方,曾经处理过这个问题…?清理过的例子,也显示了css的效果:我猜从技术上来说,它也像文本一样封装标点。
@JaredFarrish谢谢,是的,它确实从技术上封装标点。你可以ld使用replace()
调用更改拆分和连接例程,并生成一个避免标点符号的正则表达式,但您必须定义什么是标点符号,什么不是标点符号。我将把它作为练习留给读者。。。
$('p').each(function() {
var tagRE = /([^<]*)(<(?:\"[^\"]*\"|'[^']*'|[^>'\"]*)*>)([^<]*)/g,
match,
result = [],
i = 0;
while(match = tagRE.exec($(this).html())) {
var text1 = match[1].split(/\s+/),
len1 = text1.length;
var text2 = match[3].split(/\s+/),
len2 = text2.length;
for(var tIdx = 0; tIdx < len1; tIdx++ )
result[i++] = '<span>' + text1[tIdx] + '</span>';
result[i++] = match[2];
for(var tIdx = 0; tIdx < len2; tIdx++ )
result[i++] = '<span>' + text2[tIdx] + '</span>';
}
$(this).html(result.join(' '));
});