Uji kode berikut (demo) di browser IE6, IE7, firefox2+, firefpx3+, opera9.6+, safari3.1+:
<Div id = test>
<a href =#> tes </a>
</div>
<Div id = result> </div>
<type skrip = teks/javascript>
(fungsi(){
var test = document.getElementById ('test');
peringatan (test.innerhtml);
var result = document.geteLementById ('hasil');
result.innerHtml = test.innerHtml;
waspada (result.innerhtml)
}) ();
</script>
Akibatnya, akan ditemukan bahwa nilai HREF dari elemen A dalam hasil.
Bahkan, nenek moyang kita mengalami masalah ini sejak lama (terima kasih kepada Yu Bo untuk informasi yang diberikan):
Solusi pemrosesan telah disebutkan dalam artikel di atas, yaitu untuk menggunakan metode getAttribute ('href', 2) di bawah IE. Microsoft memperluas parameter kedua ke metode ini, yang dapat diatur ke 0, 1, 2, dan jika diatur ke 2, nilai asli properti dikembalikan.
Skrip dikoreksi ke:
(fungsi(){
var test = document.getElementById ('test');
peringatan (test.innerhtml);
var result = document.geteLementById ('hasil');
result.innerHtml = test.innerHtml;
if (/*@cc_on!@*/0) {// jika yaitu
var links1 = test.getElementsbyTagname ('a');
var links2 = result.getElementsbyTagname ('a');
untuk (var i = 0, len = links1.length; i <len; ++ i) {
links2 [i] .href = links1 [i] .getAttribute ('href', 2);
}
}
waspada (result.innerhtml);
}) ();
Dalam proses menemukan masalah ini, saya juga mencari bug menarik yang ditemukan oleh Hedger Wang: Ketika nilai atribut HREF baru diatur ulang di IE, jika teks tautan berisi http: // atau @, bagian dalamnya akan ditampilkan secara tidak benar dan akan ditampilkan sebagai atribut hREF yang disetel.
Solusi (Shref adalah nilai baru dari HREF yang akan ditetapkan):
shref = 'http://www.hedgerwow.com';
var isMsie = /*@cc_on!@* /false;
if (ismsie) {
shref = '' + shref; // Tambahkan ruang ekstra sebelum href baru
};
Detail: "Internet Explorer mungkin mengatur ulang bagian dalam jangkar secara tidak benar ketika HREF baru ditugaskan"