(function() {
var test = document.getElementById('test');
alert(test.innerHTML);
var result = document.getElementById('result');
result.innerHTML = test. innerHTML;
alert(result.innerHTML)
})();
その結果、2 回目のポップアップが表示されますIE6 および IE7 ブラウザの場合 result.innerHTML の A 要素の href 値は絶対パスになります。
実際、私たちの祖先はずっと前にこれらの問題に遭遇していました(情報を提供してくれたUncle Yuに感謝します):
《getAttribute(”HREF”) は常に絶対》
《getAttribute href のバグ》
解決策は上記の記事で述べられていますが、IE で getAttribute('href', 2) メソッドを使用することです。 Microsoft は、0、1、または 2 に設定できる 2 番目のパラメーターを使用してこのメソッドを拡張しました。2 に設定すると、プロパティの元の値が返されます。
スクリプトは次のように修正されます。
(function() {
var test = document.getElementById('test');
alert(test.innerHTML);
var result = document.getElementById('result');
結果.innerHTML = test. innerHTML;
if(/*@cc_on!@*/0 ) { //if ie
var links1 = test.getElementsByTagName('a');
var links2 = result. getElementsByTagName('a' );
for(var i = 0, len = links1.length; i links2[i].href = links1[i].getAttribute('href' , 2); }
}
alert(result.innerHTML);
})();
この問題を検索しているときに、次も検索しました。 Hedger Wang によって発見されたもの 興味深いバグ: IE で新しい href 属性値をリセットするときに、リンク テキストに「http://」または「@」が含まれている場合、その innerHTML が正しく表示されず、設定された href 属性として表示されます。
解決策 (sHref は、設定される href の新しい値です):
sHref = 'http://www.hedgerwow.com';
var isMSIE = /*@cc_on!@*/false;
if( isMSIE ){
sHref = ' ' sHref; // 新しい href の前に余分なスペースを追加します
};
详细:《Internet Explorer がアンカーの innerHTML をリセットする可能性があります新しい「href」が割り当てられると間違ってしまう》