使用jQuery用元素包装元素内容的子字符串

时间:2014-02-16 20:24:57

标签: javascript jquery html dom

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

<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/

2 个答案:

答案 0 :(得分: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>');
});

<强> Working jsfiddle example...

答案 1 :(得分:0)

试试这个:

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

如果那就是你想要的东西 - 我相信你想要在每个名单之后吗?