javascript - jQuery before()/after() 无法与 HTML 正常工作?

标签 javascript jquery html

我遇到了一个奇怪的问题。我有一个包含如下链接的列表:

<ul class="sub-navigation">
    <li><a href="">a</a></li>
    <li><a href="">b</a></li>
    <li><a href="">c</a></li>
    <li><a href="">d</a></li>
    <li><a href="">e</a></li>
</ul>

我想要做的是通过在第三个列表项之后插入关闭标签然后打开标签,使 jQuery 将列表分成两部分。所以我就这样:

$('.sub-navigation li').eq(2).after('google');

它正确插入文本,我得到:

<ul class="sub-navigation">
    <li><a href="">a</a></li>
    <li><a href="">b</a></li>
    <li><a href="">c</a></li>google
    <li><a href="">d</a></li>
    <li><a href="">e</a></li>
</ul>

这是正确的,但是当我尝试像这样插入实际标签时:

$('.sub-navigation li').eq(2).after('</ul><ul class="sub-navigation">');

它反转了它们o_O

<ul class="sub-navigation">
    <li><a href="">a</a></li>
    <li><a href="">b</a></li>
    <li><a href="">c</a></li><ul class="sub-navigation"></ul>
    <li><a href="">d</a></li>
    <li><a href="">e</a></li>
</ul>

为什么会这样呢?不能before()只需插入我提供的原始 HTML 即可? 如果我尝试仅插入 </ul>它消失了...

提前致谢!

最佳答案

诸如 before()after() 之类的 jQuery 方法可操作浏览器的 DOM 树。
DOM 包含完整 HTML 元素。您不能放入一半的标签。

相反,您需要操作整个标签:

$('.sub-navigation li:eq(2)').nextAll().remove().appendTo(
    $('<ul class="sub-navigation">').insertAfter($('.sub-navigation'))
)

关于javascript - jQuery before()/after() 无法与 HTML 正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8963355/

相关文章:

javascript - 为什么在jsfiddle中显示ReferenceError : function is not defined?

javascript - 如何在多列中本地添加数据?

javascript - 在浏览器中显示 400 万个 2D 正方形的最有效方法是什么?

javascript - 检测 CSS 中的内容溢出

javascript - 如果在预设时间后未完成加载,是否可以重新加载特定图像? javascript/jquery

javascript - 在 EmberJS 中保存路由转换之间的状态

javascript - 附加到提交事件的 AJAX 代码不起作用

使用按钮名称重置 JavaScript

javascript - 在PHPMailer上成功/失败的不同行为

javascript - jsfiddle 过滤器在 angularjs 中不起作用