【问题标题】:Add a UL to a LI (not add a LI to a UL)将 UL 添加到 LI(不将 LI 添加到 UL)
【发布时间】:2016-04-26 23:59:44
【问题描述】:

我正在尝试在 LI 中添加 UL。我有一个看起来像这样的 HTML 树:

<li id="node0"><a href="#" onclick="Collapse(event)"><img src="file:///C:/drag-drop-folder-tree/images/dhtmlgoodies_minus.gif"></a>All My Windows
<ul style="display: block;" id="tree_ul_0">
<li id="node0" ondragenter="return dragEnter(event)" ondragover="allowDrop(event)" ondrop="drop(event)" ondragstart="drag(event)" draggable="True"><a href="#">9:00-9:30 moving up</a></li>
<li id="node1" ondragenter="return dragEnter(event)" ondragover="allowDrop(event)" ondrop="drop(event)" ondragstart="drag(event)" draggable="True"><a href="#">9:00-9:30 moving down</a>

我正在尝试使用 Javascript 添加一个新的 UL,它将成为顶部 LI 节点 0 的子节点。

这是我的代码:

 var newul = document.createElement("ul");


 var ulist = document.getElementById("node0");
 var newItem = document.createElement("li");

 newItem.innerHTML = "<ul id='item1'><li id='Item0' ondragenter='return dragEnter(event)' ondragover='allowDrop(event)' ondrop='drop(event)' ondragstart='drag(event)' draggable='True'><a onclick='Collapse(event)' href='#'><img src='dhtmlgoodies_minus.gif'></a><text>hello</text></li></ul>"

 ulist.appendChild(newItem); 

当我执行这段代码时,我最终得到:

<li>
<ul id="item1">
<li id="Item0" ondragenter="return dragEnter(event)" ondragover="allowDrop(event)" ondrop="drop(event)" ondragstart="drag(event)" draggable="True"><a onclick="Collapse(event)" href="#"><img src="dhtmlgoodies_minus.gif"></a><text>hello</text>
</li>
</ul>
</li>

所以它添加了一个新的:

<LI>

node0 的子节点

我希望我的 item1 UL 成为 node0 的子节点。你能告诉我如何添加 UL 而不会得到多余的 LI 吗?

【问题讨论】:

    标签: javascript html html-lists html-tree


    【解决方案1】:

    你把它复杂化了。你已经得到了节点,你可以设置它的innerHTML:

    var ulist = document.getElementById("node0");
    
    ulist.innerHTML = "<ul id='item1'><li id='Item0' ondragenter='return dragEnter(event)' ondragover='allowDrop(event)' ondrop='drop(event)' ondragstart='drag(event)' draggable='True'><a onclick='Collapse(event)' href='#'><img src='dhtmlgoodies_minus.gif'></a><text>hello</text></li></ul>";
    

    或者,您可以在其中创建一个 ul 和一个 li 并添加它,但是您需要设置将适当的元素 ul 添加到节点。这很容易变成很多代码。下面的 sn-p 甚至没有设置所有事件,也没有在节点内创建 a 元素。

    var ulist = document.getElementById("node0");
    
    // Create the new ul.
    var newul = document.createElement("ul");
    newul.id = 'item1';
    
    // Create the new li
    var newItem = document.createElement("li");
    newitem.id = 'Item0';
    newitem.ondragenter = dragEnter;
    // ... and so on
    newitem.setAttribute('draggable', true);
    
    // Append the li to the ul
    newul.appendChild(newItem);
    // And append the ul to the parent li.
    ulist.appendChild(newul);
    

    在您目前的情况下,您将两者混为一谈。您创建一个从未使用过的新ul。然后创建一个新的li。然后将 li 的 innerHTML 设置为您想要拥有的整个 HTML 块,并将其添加到父级。您在文档中获得的li 是您在代码中创建的newitem

    【讨论】: