--- title: ChildNode.replaceWith() slug: Web/API/ChildNode/replaceWith tags: - DOM - Node translation_of: Web/API/ChildNode/replaceWith ---
ChildNode
.replaceWith()
的方法用一套 {{domxref("Node")}} 对象或者 {{domxref("DOMString")}} 对象,替换了该节点父节点下的子节点 。{{domxref("DOMString")}} 对象被当做等效的{{domxref("Text")}} 节点插入。
[Throws, Unscopable] void ChildNode.replaceWith((Node or DOMString)... nodes);
节点
replaceWith()
var parent = document.createElement("div"); var child = document.createElement("p"); parent.appendChild(child); var span = document.createElement("span"); child.replaceWith(span); console.log(parent.outerHTML); // "<div><span></span></div>"
ChildNode.replaceWith()
is unscopablereplaceWith()
的方法并没有作用于with语句. 参考 {{jsxref("Symbol.unscopables")}} 获取更多信息.
with(node) { replaceWith("foo"); } // ReferenceError: replaceWith is not defined
你可以在IE9及更高级的浏览器中使用下面的代码向上兼容replaceWith()
的方法:
(function (arr) { arr.forEach(function (item) { if (item.hasOwnProperty('replaceWith')) { return; } Object.defineProperty(item, 'replaceWith', { configurable: true, enumerable: true, writable: true, value: function replaceWith() { var argArr = Array.prototype.slice.call(arguments), docFrag = document.createDocumentFragment(); argArr.forEach(function (argItem) { var isNode = argItem instanceof Node; docFrag.appendChild(isNode ? argItem : document.createTextNode(String(argItem))); }); this.parentNode.replaceChild(docFrag, this); } }); }); })([Element.prototype, CharacterData.prototype, DocumentType.prototype]);
规范 | 状态 | 注释 |
---|---|---|
{{SpecName('DOM WHATWG', '#dom-childnode-replacewith', 'ChildNode.replacewith()')}} | {{Spec2('DOM WHATWG')}} | Initial definition. |
{{Compat("api.ChildNode.replaceWith")}}