首先,您的 JSFiddle 中有一个 HTML 文档,而不是 XHTML。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>
第二个警报显示失败:
[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 中使用。)