insertAdjacent.js改(それSafari2でも)
以前、fxでinsertAdjacent系メソッドを利用できるようにするもの作成してましたが、今度はSafari2にも対応させました。当然fxでも動きます。
ソース直貼とダウンロードできるようにしいてますのでお持ち帰りでどうぞ。ライセンスはご自由に!(パブリックドメイン)
Safari2
Safari2では、document.createRange()にcreateContextualFragmentメソッドがあったんでできました。Safari1でも以下がundefinedではなかったらできそう。…検証環境がないので調べられませんが…DOMParserとか?
var range = document.createRange(); alert(range.createContextualFragment); // 結果によりけり。
あとはinsertBefore, appendChildくらい?
ソース
(function() { if(window.HTMLElement) { if('insertAdjacentElement' in HTMLElement.prototype){ return; }; } else { if(navigator.vendor == 'Apple Computer, Inc.') { document.createElement('html'); window.HTMLElement = { prototype : window["[[DOMElement.prototype]]"] || {}}; } else { return; }; }; HTMLElement.prototype.insertAdjacentElement = function(w, n) { switch(w.toLowerCase()) { case 'beforebegin': this.parentNode.insertBefore(n, this); break; case 'afterbegin': this.insertBefore(n, this.childNodes[0]); break; case 'beforeend': this.appendChild(n); break; case 'afterend': this.parentNode.insertBefore(n, this.nextSibling); break; }; return n; }; HTMLElement.prototype.insertAdjacentText = function(w, t){ this.insertAdjacentElement(w, document.createTextNode(t || '')); }; HTMLElement.prototype.insertAdjacentHTML = function(w, h) { var r = document.createRange(); r.selectNode(this); this.insertAdjacentElement(w, r.createContextualFragment(h)); }; })();