如何删除js中的子节点

时间:2014-04-29 22:27:10

标签: javascript removechild

我有一个父节点名orgdiv和一个子节点名newdiv。我试图删除子节点,但它不在这里是代码。

function ajxsrch(str) {
    if (str.length != 0) {
        if (count == 0) {
            var newdiv = document.createElement('DIV');
            newdiv.className = "newsearch";
            var orgdiv = document.getElementById("search");
            orgdiv.appendChild(newdiv);
            count = 1;
            alert("firstif");
        } else alert("first if else");
    } else {
        alert(str);
        count = 0;
        alert(count);
        newdiv.orgdiv.removeChild(newdiv);
    }
}

1 个答案:

答案 0 :(得分:0)

您的方法存在一些问题,您的JavaScript控制台通常会帮助调试大部分问题。

首先,考虑对象newdivorgdiv。在else块中,您可以引用这两个块,但它们不会在任何地方声明或初始化。您的if块中有一个声明,但当然第二次调用此方法时不会运行。当else块正在执行时,if块将被完全忽略。

所以你需要纠正你的对象引用:

function ajxsrch(str) {
    var orgdiv = document.getElementById("search");
    var newdiv = document.getElementById("newDivId"); // assuming div has an ID
    ...

然后,当然,在if块中,您将正确初始化newdiv,因为它尚不存在。

newdiv = document.createElement('DIV');
newdiv.id = "newDivId";
newdiv.className = "newsearch";

最后,在删除元素时,您错误地将父级引用为子级的属性(newdiv.orgdiv.removeChild(newdiv);)。相反,只需直接访问父级:

orgdiv.removeChild(newdiv);

所以你的最终解决方案就变成了:

function ajxsrch(str) {
    var orgdiv = document.getElementById("search");
    var newdiv = document.getElementById("newDivId");

    if (str.length != 0) {
        if (count == 0) {
            newdiv = document.createElement('DIV');
            newdiv.id = "newDivId";
            newdiv.className = "newsearch";

            orgdiv.appendChild(newdiv);
            count = 1;
            alert("firstif");
        } else alert("first if else");
    } else {
        alert(str);
        count = 0;
        alert(count);
        orgdiv.removeChild(newdiv);
    }
}

另请参阅Node.removeChild MDN文档