Jquery 将段落中的单词用span换行,保持嵌套链接正常运行

Jquery 将段落中的单词用span换行,保持嵌套链接正常运行,jquery,split,html,Jquery,Split,Html,如何在保持任何嵌套链接正常运行的同时,将每个单词都用一个空格包装在一个段落中?使用下面的代码,我很接近,但是在空格上拆分会在a和href之间插入一个跨度,结果如下: <p><span><a< span> <span>href="#"&gt;this</span></a<></span></p> 这也许能更好地说明我的观点。谢谢 问题是您不希望在其他标记中随机插入“标记。如果您曾经

如何在保持任何嵌套链接正常运行的同时,将每个单词都用一个空格包装在一个段落中?使用下面的代码,我很接近,但是在空格上拆分会在
a
href
之间插入一个跨度,结果如下:

<p><span><a< span> <span>href="#"&gt;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(' '));

});