我有一个父节点名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);
}
}
答案 0 :(得分:0)
您的方法存在一些问题,您的JavaScript控制台通常会帮助调试大部分问题。
首先,考虑对象newdiv
和orgdiv
。在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文档