与dystroy提供的稍微不同的方法,以下是移动您希望保留的元素,将其放置为要从中删除所有其他子元素的父元素的第一个子元素(如果没有提供父元素,则默认为该元素),而不是替代的“删除所有内容,然后将其放回”方法。移动之后,这会从该父节点中删除所有后续子节点(这包括一个相当丑陋的函数来检索给定元素,尽管没有尝试弥补没有该功能的浏览器中的缺失):body
document.querySelector()
function retrieveElem(ref) {
if (!ref) {
return document.body;
} else {
if (typeof ref === 'string') {
if (document.querySelector) {
var dQSresult = document.querySelector(ref);
if (dQSresult) {
return dQSresult;
} else {
return document.querySelector('#' + ref);
}
}
} else {
switch (ref.nodeType) {
case 1:
// it's an element
return ref;
case 9:
// it's the document node
return document.body;
}
}
}
}
function clearAllExcept(el, from) {
el = retrieveElem(el);
from = retrieveElem(from);
from.insertBefore(el, from.firstChild);
while (from.firstChild.nextSibling) {
from.removeChild(from.firstChild.nextSibling);
}
}
clearAllExcept('#id63','.aChild');
JS 小提琴演示。
这可以像上面那样调用,使用 CSS 选择器字符串,或者如下:
// with a CSS selector to identify the `id` of the child
clearAllExcept('#id63');
JS 小提琴演示。
// with a string to identify the `id` of the child
clearAllExcept('id63');
JS 小提琴演示。
// with a node-reference to the child:
clearAllExcept(document.getElementById('id63'));
JS 小提琴演示。
类似的选择器也可用于识别父级:
// using the `document`:
clearAllExcept('#id63', document);
JS 小提琴演示。
// with a string to identify the `id` of the parent
clearAllExcept('#id63','#test');
JS 小提琴演示。
// with a node-reference to the parent:
clearAllExcept('#id63', document.getElementById('test'));
JS 小提琴演示。
参考: