【发布时间】:2017-04-10 18:02:26
【问题描述】:
我希望能够使用 Jquery 将内容可编辑 DIV 中的 DOM 节点(LI)“移动”到下一个最高 UL。所以在下面...
<ul>
<li>item 1</li>
<li>item 2</li>
<li>item 3
<ul>
<li>item A</li>
<li>item B</li>
<li>item C</li>
</ul>
</li>
</ul>
我希望能够将项目 B 上移到包含项目 1、2 和 3 的 UL。这是当前代码无论出于何种原因都不起作用(它全部基于键盘快捷键,具体取决于光标所在的位置,因此 getSelection() 策略):
选择当前节点...
var $current_node = document.getSelection().anchorNode.parentElement;
将当前节点“移动”到第二个父 UL([0] 是我们已经在其中的直接 UL)...
$($current_node).parents("ul")[1].append($current_node);
很遗憾,控制台报这个错误...
未捕获的类型错误:$(...).parents(...)[1].append 不是函数
我错过了什么?我有一种感觉,我不理解 JQuery 对象和使用 Javascript 选择的 DOM 元素之间的区别。我不得不绞尽脑汁想知道$current_node 需要被包裹在$() 中才能访问.parent(),但我认为仍然没有完成一些非常基本的事情。谢谢!
【问题讨论】:
-
编辑:我误读了 HTML 结构,
item 3和li是否包含ul? -
[#] 将一个元素从包含它的 jQuery 对象中分离出来。 append 是一个 jQuery 函数,您不再对其进行操作。在这种情况下使用 eq(#) 而不是 [#] 将其保留为 jQuery 对象。这就是您的未捕获类型错误的原因。这可能不是你的全部问题。
-
我知道它看起来很奇怪@HenryDev,但对于嵌套的 UL 列表来说,结构是准确的。签出:w3schools.com/tags/tryit.asp?filename=tryhtml_lists2
-
@Taplar eq(#) 确实摆脱了 TypeError...但仍然无法正常工作。
-
@Hank 我已经发布了我的解决方案,将“项目 B”提升了一级。希望对你有帮助
标签: jquery list nested append parent