棘手的jQuery DOM操作(包装文本)

棘手的jQuery DOM操作(包装文本),jquery,html,dom,dom-manipulation,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 magn

我有一些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.
1.Lorem ipsum dolor。坐吧,艾米特。奉献给精英们。
2.暂时性的劳动和财产损失。
我想要的是:

<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>
1.Lorem ipsum dolor。坐吧,艾米特。奉献给精英们。
2.暂时性的劳动和财产损失。
基本上,每个“数字”跨度表示一个项目符号的开始,该项目符号要么运行到下一个“数字”跨度,要么运行到HTML的末尾(如果没有更多的“数字”跨度)。在这些点中,可能有额外的HTML标记以及纯文本。我想把每个项目符号点都用一个跨距括起来,同时把项目符号内的文本也用一个跨距括起来。不幸的是,这看起来可能是一种痛苦

你知道我如何使用jQuery(甚至其他解决方案)来实现这一点吗

编辑:算出了。jQuery有一个
.nextUntil()
函数,在这里是合适的: 之后,可以使用
.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);
var点=$('');
$('body').contents().each(function()){
var元素=$(此);
if(point.children().length>0&&element.is('span.number')){
$('body')。追加(点);
点数=$('');
} 
点.附加(元素);
})
$('body')。追加(点);

.

我肯定你没有创建这个标记,但是使用
将是正确的选择…我同意,这并不能解决你的问题,但似乎使用正确的标记来创建列表会让你的生活更轻松。是的,不是我的标记。另外,它们也不是真正的要点,但我将问题抽象为t为简单起见。
实际上是正确的标记。@Chris An
ol
没有项目符号,它与您的标记完全相同。@Chris“每个“数字”跨度表示项目符号的开始这就是你的HTML所表示的。因此,显然你应该使用
ul
ol
。语义HTML请或更准确地描述你的HTML应该做什么。在开始时有一个额外的
。点
,你可以通过选中
点来避免它。children().length>0
,然后追加并重新创建它。@SalmanA:你是对的,我先用
index
删除了它。干杯。