<div id="test">
<a href="#"> test </a>
</div>
<div id="result"></div>
<script type="text/javascript">
(function(){
var test = document.getElementById('test');
alert(test.innerHTML);
var result = document.getElementById('result');
result.innerHTML = test.innerHTML;
alert(result.innerHTML)
})();
</script>
の結果、IE 6、IE 7ブラウザで第2のポップアップのreult.inners HTML中のA元素のhref値が絶対パスとなることがわかった。実は先にこれらの問題に遭遇しました。
「get Attribute("HREF")is always absoute」
《get Attribute href bug》は、上記の文章で処理案に言及した。つまり、IEの下でget Attribute(‘href’,2)の方法を使用する。Microsoftはこの方法に第二のパラメータを拡張し、0、1、2に設定すれば、属性の元の値を返します。スクリプトは、
(function(){
var test = document.getElementById('test');
alert(test.innerHTML);
var result = document.getElementById('result');
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 < len; ++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; //add extra space before the new href
};
詳細:Internet Explorer mightreet Ancher's inners incorectly when a new「href」is assigned