Saya percaya semua orang akrab dengan atribut InnerHTML dari objek DOM, tetapi outerhtml kurang digunakan. Atribut InnerHTML mengembalikan HTML yang terkandung dalam objek DOM dari tag start ke tag akhir, sedangkan atribut outerHTML mengembalikan HTML termasuk tag objek DOM. Gambar berikut dapat menjelaskan perbedaan antara dua atribut dengan baik:
outerHtml adalah properti pribadi milik IE di awal. Anda dapat melihat deskripsi pada properti MSDN: OUERHTML (http://msdn.microsoft.com/en-us/library/ms534310(vs.85).aspx). Saat ini IE, Chrome, Safari, dan Opera dapat mendukung atribut ini. Alasan mengapa outerHTML tidak mendukung Firefox, atribut ini akan selalu kembali tidak terdefinisi di Firefox. Sangat menyenangkan bahwa HTML5 akan menambahkan atribut ini.
Biarkan Firefox mendukung atribut OUTERHTML diimplementasikan dengan memperluas prototipe htmlelement:
Salinan kode adalah sebagai berikut:
if (typeOf (htmleLement)! = "tidak terdefinisi") {
Htmlelement.prototype .__ Definesetter __ ("outerHtml", function {
var r = this.OwnerDocument.createrange ();
r.setStartBefore (ini);
var df = r.createContextualFragment (s);
this.parentnode.replacechild (df, this);
kembali S;
});
Htmlelement.prototype .__ definegetter __ ("outerHtml", function () {
var a = this.attributes, str = "<" this.tagname, i = 0;
untuk (; i <a.length; i)
if (a [i]. ditentukan)
str = "" Hormis dans les mesin A So Leferensi Alam semesta, les kasino dari res jeux par contoh grandes enam roues, pai go poker, blackjack, baccarat, la <a href = "http://topcasinosenen craps.com/la-roulette"> roulette </a> craps, roulette. a [i] .name "=" "a [i] .value" "";
if (! this.canhavechildren)
mengembalikan str " />";
kembalikan str ">" this.innerhtml "<!-" this.tagname "->";
});
Htmlelement.prototype .__ definegetter __ ("canhavechildren", function () {
Kembali
!/^(Area | Basis | Basefont |
COL | Bingkai | HR | IMG | BR |
Input | IsIndex | Link | Meta
| param) $/. Test (this.tagname.tolowercase ());
});
}
Metode ini berasal dari w3help (http://www.w3help.org/zh-cn/causes/sd9017), yang agak rumit dan membutuhkan intrusi ke dalam prototipe. Ada juga alternatif yang lebih sederhana. Pertama -tama buat node kosong, tambahkan objek DOM untuk mendapatkan atribut outerHTML ke node kosong ini, dan kemudian mengakses bagian dalam dari simpul kosong ini:
Salinan kode adalah sebagai berikut:
function outerHtml (elem) {
if (typeOf elem === "string") elem = document.geteLementById (elem);
// Buat Node Div Kosong
var div = document.createElement ("div");
// Masukkan elemcopy yang disalin ke dalam node div kosong
div.AppendChild (elem.clonenode (true));
// kembalikan konten html dari div
return div.innerhtml;
};
Dibandingkan dengan metode di atas, tidak perlu memindahkan prototipe, dan jumlah kode jauh lebih kecil. Saya percaya akan ada solusi lain.