我有一个简单的html文档。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns="http://www.w3.org/2000/xmlns
xmlns:bar="http://www.foo.com/schemas/bar">
<head>
</head>
<body>
<img src="penguins.png" bar:xwidth="300"/>
</body>
</html>
当我检查属性栏:Chrome或Firefox调试器(或Javascript)中的xwidth时,我希望找到该属性的namespaceURI为“http://www.foo.com/schemas/bar”,不幸的是它是空的。
问题似乎是解析元素/ attrs的程序化构造。在Javascript中,我可以构造我想要的东西,但是任何解析,加载上面的元素.innerHTML =“”,都会产生一个带有null命名空间的属性。
有关如何使属性的namespaceURI正确的任何想法?
答案 0 :(得分:2)
任意前缀的命名空间解析是XML功能,而不是HTML功能。因此,如果您使用application/xhtml+xml
mime类型为页面提供服务,则会导致浏览器使用XML解析器,并且您的命名空间会按照您的意图解析。
浏览器的HTML解析器根本不支持前缀/命名空间解析,除非在解析嵌入式SVG和MathML时,其中非常小的属性列表被“神奇地”转换,例如xml:lang
和xlink:href
。永远不支持您自己的命名空间。
innerHTML
的工作方式与HTML解析器完全相同。
(特别注意IE的HTML解析器,它有自己的关于如何处理名称中冒号的元素和属性的概念。虽然你仍然无法获得namespaceURI的值)
所以你唯一的选择是:(i)使用application/xhtml+xml
; (ii)使用脚本构建命名空间属性;或(iii)不使用命名空间属性。