ChildNode.after()
は、ChildNode
の親の子リストの、ChildNode
の直後に、 Node
または DOMString
オブジェクトのセットを挿入します。 DOMString
オブジェクトは Text
ノードと等価なノードとして挿入されます。
構文
[Throws, Unscopable] void ChildNode.after((Node or DOMString)... nodes);
パラメーター
例外
HierarchyRequestError
: ノードは階層の指定の位置には挿入できません。
例
要素の挿入
var parent = document.createElement("div");
var child = document.createElement("p");
parent.appendChild(child);
var span = document.createElement("span");
child.after(span);
console.log(parent.outerHTML);
// "<div><p></p><span></span></div>"
テキストの挿入
var parent = document.createElement("div");
var child = document.createElement("p");
parent.appendChild(child);
child.after("Text");
console.log(parent.outerHTML);
// "<div><p></p>Text</div>"
要素とテキストの挿入
var parent = document.createElement("div");
var child = document.createElement("p");
parent.appendChild(child);
var span = document.createElement("span");
child.after(span, "Text");
console.log(parent.outerHTML);
// "<div><p></p><span></span>Text</div>"
ChildNode.after() はスコーピングに非対応
after()
メソッドは with
文でのスコーピングに対応していません。詳細は Symbol.unscopables
をご覧ください。
with(node) {
after("foo");
}
// ReferenceError: after is not defined
ポリフィル
以下のポリフィルで、Internet Explorer 9 以降でも after()
メソッドが利用できます。
// from: https://github.com/jserz/js_piece/blob/master/DOM/ChildNode/after()/after().md
(function (arr) {
arr.forEach(function (item) {
if (item.hasOwnProperty('after')) {
return;
}
Object.defineProperty(item, 'after', {
configurable: true,
enumerable: true,
writable: true,
value: function after() {
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.insertBefore(docFrag, this.nextSibling);
}
});
});
})([Element.prototype, CharacterData.prototype, DocumentType.prototype]);
別のポリフィル
// from: https://github.com/FabioVergani/js-Polyfill_Element.prototype.after/blob/master/after.js
(function(x){
var o=x.prototype,p='after';
if(!o[p]){
o[p]=function(){
var e, m=arguments, l=m.length, i=0, t=this, p=t.parentNode, n=Node, s=String, d=document;
if(p!==null){
while(i<l){
e=m[i];
if(e instanceof n){
t=t.nextSibling;
if(t!==null){
p.insertBefore(e,t);
}else{
p.appendChild(e);
};
}else{
p.appendChild(d.createTextNode(s(e)));
};
++i;
};
};
};
};
})(Element);
/*
minified:
(function(x){
var o=x.prototype;
o.after||(o.after=function(){var e,m=arguments,l=m.length,i=0,t=this,p=t.parentNode,n=Node,s=String,d=document;if(p!==null){while(i<l){((e=m[i]) instanceof n)?(((t=t.nextSibling )!==null)?p.insertBefore(e,t):p.appendChild(e)):p.appendChild(d.createTextNode(s(e)));++i;}}});
}(Element));
*/
仕様
仕様書 | 策定状況 | コメント |
---|---|---|
DOM ChildNode.after() の定義 |
現行の標準 | 初期定義 |
ブラウザー実装状況
BCD tables only load in the browser
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.