jQuery 添加结束标记,然后在使用 .before() 时重新打开

标签 jquery html dom-manipulation

我有这个 HTML:

    <ul>
        <div>
            <li>a</li>
            <li>b</li>
            <li class="break">c</li>
            <li>d</li>
            <li>f</li>
        </div>
    </ul>

我要的是哪里class="break"我想要 parent div关闭并打开一个新的,所以我最终得到了这个:

    <ul>
        <div>
            <li>a</li>
            <li>b</li>
        </div>
        <div>
            <li>c</li>
            <li>d</li>
            <li>f</li>
        </div>
    </ul>

现在我试过了:

$(".break").before("</div><div>");

但是 jQuery 并没有像我期望的那样运行,而是重写了我输入的内容并放置了一个空的 div反而。像这样:

    <ul>
        <div>
            <li>a</li>
            <li>b</li>
            <div></div>
            <li class="break">c</li>
            <li>d</li>
            <li>f</li>
        </div>
    </ul>

那么我怎样才能实现我所追求的呢?

最佳答案

假设您有以下标记:

<ul>
    <li>a</li>
    <li>b</li>
    <li class="break">c</li>
    <li>d</li>
    <li>f</li>
</ul>

并且您想将其转换为:

<ul>
    <li>a</li>
    <li>b</li>
</ul>
<ul>
    <li class="break">c</li>
    <li>d</li>
    <li>f</li>
</ul>

您可以使用 nextAll()andSelf()获取要移动的元素,然后创建一个新的 <ul>并使用 append()重新定位元素:

var boundary = $("li.break");
$("<ul>").insertAfter(boundary.parent()).append(boundary.nextAll().andSelf());

您可以在this fiddle 中看到结果.

关于jQuery 添加结束标记,然后在使用 .before() 时重新打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9886676/

相关文章:

javascript - 如何根据页面宽度条件删除()和撤消删除()?我不需要隐藏或切换

javascript - 如何选择 '.on show.bs.modal'内的触发按钮[Bootstrap modal]

javascript - 单选按钮 : weird selection behaviour

javascript - jQuery empty() 与 remove()

javascript - 为动态内容和不同的嵌套结构堆叠嵌套的 Div,如 Accordion (无插件)

javascript - 使标题保持在一定的窗口宽度?

html - 目的 : making div inline. 应显示为 Inline-Flex 或 Inline-block

javascript - 如何使删除出现在同一行?

javascript - 如何对 DOM 操作进行单元测试(使用 jasmine)

javascript - jQuery 到传统 Javascript 的映射