2

我想在指定节点之后添加一个新的子节点作为第三个子节点。

<ul id="menu">
    <li>one</li>
    <li>tow</li>
    <li>three</li>
    <li>four</li>
</ul>

<script>
var li = document.createElement("li");
document.getElementById("menu").appendChild(li);
var sometext = document.createTextNode("third one");
li.appendChild(sometext); 
</script>
4

4 回答 4

5

insertBefore如果要在其容器结束之前的任何位置添加节点,请使用此选项。

parentElement.insertBefore(newNode, currentThirdNode);
于 2012-11-11T09:06:50.453 回答
4

childNodes请记住,siblings和之间存在差异ElementSiblings。atextNode是一个Node,但不是一个Element。所以如果你想在 DOM 中插入一个元素,使用nextElementSibling| previousElementSiblingappendChild| 和只包含这样的元素insertBefore的父属性:children

function insertAsThird( element, parent ){
  if ( parent.children.length > 2 ){
   parent.insertBefore(element, parent.children[2]);
 }
 else parent.appendChild(element);
}

并像这样使用它:

insertAsThird( yourThirdElement, document.getElementById("your target parent"));

if you want to to work on childNodes, not Elements, just change the parent.children parts to parent.childNodes

于 2012-11-11T10:14:24.580 回答
1

javascript(没有 jQuery):

var newLi = document.createElement("li");
newLi.innerHTML ="new el 3"
var menu = document.getElementById("menu");
var el3 = menu.getElementsByTagName("li")[2];
menu.insertBefore(newLi, el3);

或使用 jQuery:

$('#menu').children().eq(1).append('<li>new</li>');    
于 2012-11-11T09:33:18.450 回答
1

我认为您应该在添加新元素之前附加 textNode,如下所示:

<script>
  var li = document.createElement("LI");
  var sometext = document.createTextNode("third one");
  li.appendChild(sometext);

  var menu = document.getElementById("menu");
  var third = parent.getElementsByTagName("LI")[2];

  menu.insertBefore(li, third);
</script>

我希望这对你有用..

于 2012-11-11T09:33:55.890 回答