序文として、アプローチを根本的に変更することで、この問題はすでに解決したと述べておきます。しかし、それを解決する過程で、私は魅力的で悩ましいテスト ケースをまとめました。
AJAX 呼び出しから返された文字列があります。文字列には HTML が含まれていますが、そのほとんどは役に立ちません。DOM に挿入された文字列 (およびそのすべての子) から 1 つの要素が必要です。これのシミュレーションは次のとおりです。
<!DOCTYPE html>
<html>
<head>
<title>wtf?</title>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script>
$(document).ready(function() {
var markup = '<div class="junk"><div class="good"><time datetime="2013-03-29">March 29, 2013</time></div></div>',
output = $(markup).find('.good').clone().wrap('<div />').parent().html();
$('body').append(output);
});
</script>
</head>
<body></body>
</html>
このファイルのホストされたコピーがここにあります: http://alala.smitelli.com/temp/wtf_ie.html (永久にアップすることはありません)。
これが行うべき.good
ことは、 div と子要素を抽出し、<time>
それらを本文に挿入することです。.wrap().parent()
子に加えて、選択した要素を抽出します (この質問を参照してください)。.clone()
とは.html()
、問題を示す工夫です。
ユーザーには、今日の日付が表示されます。また、Chrome、Firefox、IE9 などで動作します。
March 29, 2013
ただし、IE7 および 8 では、表示されるテキストは次のとおりです。
<:time datetime="2013-03-29">March 29, 2013
開口部<
が示され、コロンが挿入されています。終了</time>
タグは影響を受けないように見え、エスケープされていません。
何が起きてる?これはある種のバグですか、それとも予想される動作ですか? コロンはどこから来るのですか?
編集:追加document.createElement('time')
またはhtml5shivの提案に関する限り、どちらも動作を変更していないようです。