一个简单的Javascript问题

这是一段实现添加或删除列表项的代码,我想问为什么点击“删除”时,如果是新添加的项就只需要点一次,而原本存在的项(也就是其中的"A1"、"A2"、"A3"项)就必须点两次呢?此外,当myUL中已经没有子节点了,再点"删除"按钮却没有执行else里的内容(也就是alert命令),这是为啥??
求解惑!~

 <!DOCTYPE html >

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Javascript</title>
    <script type="text/javascript">
        function insert() {
            var newLi = document.createElement("li");
            var text = document.createTextNode(document.getElementById("input1").value);
            newLi.appendChild(text);
            var temp = document.getElementById("myUL");
            temp.appendChild(newLi);
        }
        function dele() {
            var t = document.getElementById("myUL");
            if (t.hasChildNodes) {
                t.removeChild(t.lastChild);
            }
            else {
                alert("已经没有可删除项!");
            }
        }
    </script>
</head>

<body>
         <div style="width:300px; height:300px; overflow:auto;">  
            <ul id="myUL">
                <li>A1</li>
                <li>A2</li>
                <li>A3</li>
            </ul>
         </div>
          添加新的内容:<input id="input1" type="text" />
            <input  type="button" value="添加新项" onclick="insert()" />
            <input  type="button" value="删除项目" onclick="dele()" />
</body>
</html>

空白字符也算一个节点,你的a1~a3后由换行,所以需要点击2次。

改成下面的结构

         <ul id="myUL"><li>A1</li><li>A2</li><li>A3</li></ul>

,或者代码改成下面的

       function dele() {
            var t = document.getElementById("myUL");
            var li=t.getElementsByTagName('li')
            if (li.length>0) {
                t.removeChild(li[li.length-1]);
            }
            else {
                alert("已经没有可删除项!");
            }
        }

T.T 感觉代码没有写错呀

实质上是因为换行以后dom节点会多一个‘空白节点‘ ,而后续增加的代码内部不会添加换行就不会有空白节点了。