jquery - 棘手的 jQuery DOM 操作(文本换行)

标签 jquery html dom dom-manipulation

我有一些这样的 HTML:

<span class="number">1.</span>Lorem ipsum dolor. <span class="special">Sit amet.</span> Consectur adipisicing elit. 
<span class="number">2.</span>Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

我想要的是这样的:

<span class="point"><span class="number">1.</span><span class="text">Lorem ipsum dolor. <span class="bar">Sit amet.</span> Consectur adipisicing elit.</span></span>
<span class="point"><span class="number">2.</span><span class="text">Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</span></span>

基本上,每个“数字”范围都表示项目符号点的开始,该点要么运行到下一个“数字”范围,要么运行到 HTML 末尾(如果没有更多“数字”范围)。在点内,可能有附加的 HTML 标签和纯文本。我想将每个项目符号点包装在一个跨度中,并将项目符号点内的文本包装在一个跨度中。不幸的是,这看起来可能很痛苦。

知道如何使用 jQuery(或者其他解决方案)来解决这个问题吗?

编辑:弄清楚了。 jQuery 有一个适合这里的 .nextUntil() 函数:http://api.jquery.com/nextUntil/ 之后,可以使用 .wrap() 完成包装:http://api.jquery.com/wrap/

再次编辑:实际上,我认为.nextUntil()函数只处理标签节点而不是文本节点。 :(

最佳答案

这有效...

var point = $('<span class="point" />');

$('body').contents().each(function() {

    var element = $(this);

    if (point.children().length > 0 && element.is('span.number')) {
        $('body').append(point);
        point = $('<span class="point" />');
    } 

    point.append(element);

})

$('body').append(point);

jsFiddle .

关于jquery - 棘手的 jQuery DOM 操作(文本换行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6450041/

相关文章:

javascript - Jquery input.mask 与正则表达式

jquery - Bootstrap左侧边栏切换菜单

javascript - 如何在具有正常链接的页面之间传递数据?

jquery - webOS 上的 jQTouch 与 PhoneGap

html - 将两个 css 设置合并为一个

javascript - JS动画会覆盖自身而不是替换

dom - 使用 XPath 到达特定类时如何停止查询?

java - 使用 DOM 解析时如何识别 xml 结束标记?

javascript - DOM Attr 类使用示例

jQuery 拖放 - 只允许列表中的一项