使用 jQuery 将元素内容的子字符串与元素包装在一起



我有一个逗号分隔的链接列表,如下所示:

<a href="#">link</a>,
<a href="#">link</a>,
<a href="#">link</a>,
<a href="#">link</a>,
<a href="#">link</a>,
<a href="#">link</a>
<div></div>

现在我想将链接从位置 3 包装到最后一个位置,使其看起来像:

$("a").eq(1).nextUntil("div").wrapAll('<span>');
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="#">link</a>,
<a href="#">link</a>,
<span>
    <a href="#">link</a>,
    <a href="#">link</a>,
    <a href="#">link</a>,
    <a href="#">link</a>
    </span>
<div></div>

我是这样试过的:

    <a href="#">link</a>,
    <a href="#">link</a>,
    <span>
    <a href="#">link</a>,
    <a href="#">link</a>,
    <a href="#">link</a>,
    <a href="#">link</a>
    </span>
    <div></div>

但是,这不会换行逗号,结果如下所示:

<a href="#">link</a>,
<a href="#">link</a>,
<span>
    <a href="#">link</a>
    <a href="#">link</a>
    <a href="#">link</a>
    <a href="#">link</a>
    </span> ,,,
<div></div>

如何在嵌套中包含逗号?

演示:http://jsfiddle.net/aa9GJ/1/

好吧,我终于想通了一些东西。 你在span中选择你想要的第一个元素,然后你解析DOM并自己创建一个元素数组,而不是让jQuery来做。 然后你可以像以前一样包装数组,它将包括逗号......

$("a").eq(2).each(function(){
    var $elements = $(this);
    var next = this.nextSibling;
    while (next) {
        if ($(next).is("div")) {
            break;
        } else {
            $elements.push(next);
            next = next.nextSibling;
        }
    } 
   $elements.wrapAll('<span>');
});

工作 jsfiddle 示例...

试试这个:

$("a").eq(1).nextUntil("div").wrapAll('</a>');

如果这就是你想要的 - 我相信你想要在每个列表之后对吗?

最新更新