まず、JSFiddle に XHTML ではなく HTML ドキュメントがあります。HTML にはカスタム名前空間がなく、XML/XHTML だけがそれを持っています。
次に、ns
名前空間が何であるかを定義せずに名前空間プレフィックスを使用しています。他のブラウザがまったく機能するのは不思議です。
第三に、これらの問題を修正したとしても、(残念ながら) jQuery を使用して、以前に定義された名前空間プレフィックスを使用して要素を DOM に詰め込むことはできません。
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:foo="hello"><head>
<title>Using jQuery to add namespaced attribute</title>
</head><body>
<div><p foo:bar="yes">one</p></div>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript"><![CDATA[
var xhtml = '<p foo:bar="no">two</p>';
alert($('div').html());
try{ $('div').append(xhtml); }
catch(e){ alert(e); }
]]></script>
</body></html>
最初のアラートは、カスタム名前空間が機能していることを示しています。
<p xmlns="http://www.w3.org/1999/xhtml" foo:bar="yes" xmlns:foo="hello">one</p>
2 番目のアラートは失敗を示しています。
[Firefox] "An invalid or illegal string was specified" code: "12"
[Chrome] Error: SYNTAX_ERR: DOM Exception 12
[IE9] DOM EXception: SYNTAX_ERR (12)
これは IE9 や SVG とは関係ありません。主にjQueryと関係があります。( .innerHTML
IE9 と FF で DOM 要素の を設定すると、希望どおりに動作しますが、Chrome では動作しません。)