【问题标题】:jQuery add closing tag and then reopen when using .before()jQuery 添加结束标记,然后在使用 .before() 时重新打开
【发布时间】:2012-04-10 19:34:15
【问题描述】:

我有这个 HTML:

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

我想要的是 class="break" 我希望父 div 关闭并打开一个新的,所以我最终得到这个:

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

现在我已经尝试过了:

$(".break").before("&lt;/div&gt;&lt;div&gt;");

但是 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>

那么我怎样才能达到我所追求的目标呢?

【问题讨论】:

  • 我认为&lt;ul&gt; 中的&lt;div&gt; 不是有效的html
  • @andreas 说的是真的,ul 中的 div 无效。而不是这样做,你想要达到的最终目标是什么。将 li 分列?
  • 目的是将它们分成列。问题是我展示的菜单是一个非常简化的菜单,而真正的菜单包含很多层。
  • 如果div 不可行,我很乐意接受关闭&lt;/ul&gt; 然后重新打开&lt;ul&gt;

标签: jquery html dom-manipulation


【解决方案1】:

假设您有以下标记:

<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() 来获取要移动的元素,然后创建一个新的&lt;ul&gt; 并使用append() 重新定位元素:

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

你可以在this fiddle看到结果。

【讨论】:

  • 这个救了我,因为我无法在需要的地方插入结束标签。谢谢!
  • 从 jQuery 1.8 开始,你应该使用 addBack 而不是 andSelf。
【解决方案2】:

优秀的解决方案

在我的情况下好吧..可以说我有多个 li.break

所以以下解决方案帮助了我

 $("li.break").each(function(){
     var boundary = $(this);
     $("<ul>").insertAfter(boundary.parent()).append(boundary.nextAll().andSelf());
 });    

检查这个小提琴http://jsfiddle.net/stLW4/127/ 以获得更多理解

【讨论】:

  • 你好 sid 太棒了,但我如何实现 li.break 包装在 ul 标记中,其他将像你在 js fiddle 中一样工作,所以它实际上是 a 和 b 的 3 ul其他的 c 和 de 我能做到这一点吗?
猜你喜欢
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-24
  • 2018-08-21
  • 2013-01-22
相关资源
最近更新 更多