我有一个由JS创建的DOM元素填充的
,
我希望在JS函数重复时清除该
,
然而,我听说使用document.getElementById('elName').innerHTML = "";
不是一个好主意,
有什么有效的替代方法可以清除该
的内容吗?
我希望在JS函数重复时清除该
document.getElementById('elName').innerHTML = "";
不是一个好主意,
有什么有效的替代方法可以清除该
如果你有jQuery的话,则可以:
$('#elName').empty();
否则:var node = document.getElementById('elName');
while (node.hasChildNodes()) {
node.removeChild(node.firstChild);
}
Element.update()
,例如:$('my_container').update()
var parDiv = document.getElementById('elName'),
parChildren = parDiv.children, tmpChildren = [], i, e;
for (i = 0, e = parChildren.length; i < e; i++) {
tmpArr.push(parChildren[i]);
}
for (i = 0; i < e; i++) {
parDiv.removeChild(tmpChildren[i]);
}
如果您正在使用jQuery,可以使用.empty()
。
这只是一种替代方案,while
循环更加优雅。
while
循环,因为它看起来更清晰。 - Tom您可以重新定义.innerHTML。在Firefox和Chrome中,使用.innerHTML = ""清除元素不是问题。但在IE中,这样做会立即清除任何子元素。在此示例中,“mydiv.innerHTML”通常会返回“undefined”。(没有重新定义的情况下,在本文创建时的IE 11中)
if (/(msie|trident)/i.test(navigator.userAgent)) {
var innerhtml_get = Object.getOwnPropertyDescriptor(HTMLElement.prototype, "innerHTML").get
var innerhtml_set = Object.getOwnPropertyDescriptor(HTMLElement.prototype, "innerHTML").set
Object.defineProperty(HTMLElement.prototype, "innerHTML", {
get: function () {return innerhtml_get.call (this)},
set: function(new_html) {
var childNodes = this.childNodes
for (var curlen = childNodes.length, i = curlen; i > 0; i--) {
this.removeChild (childNodes[0])
}
innerhtml_set.call (this, new_html)
}
})
}
var mydiv = document.createElement ('div')
mydiv.innerHTML = "test"
document.body.appendChild (mydiv)
document.body.innerHTML = ""
console.log (mydiv.innerHTML)
''
是一个字符串,但它是一种非常轻量级的“使用字符串操作 DOM”的方式。它高效、定义明确,并且对于编程人员来说很直观。我敢说这比在循环中删除子元素要快得多。 - tenfour