(X)HTML文档中的getElementsByTagNameNS

时间:2010-09-25 11:54:27

标签: javascript dom xhtml

我对Javascript和DOM有疑问;不应该以下代码检索正文中的三个foo:bar元素?警报窗口显示零。它在我拥有的任何浏览器中都不起作用(甚至不是Chrome Canary)。谢谢你的帮助,周末愉快。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:foo="http://foo.com">
    <head>
        <title>Hello!</title>

        <script type="text/javascript">
        function bodyLoad() {
            var extElements = document.getElementsByTagNameNS('http://foo.com', 'bar');

            alert(extElements.length);
        }
        </script>
    </head>

    <body onload="bodyLoad();">
        <foo:bar>First Foo-Bar</foo:bar>
        <foo:bar>Second Foo-Bar</foo:bar>
        <foo:bar>Third Foo-Bar</foo:bar>
    </body>
</html>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:foo="http://foo.com"> <head> <title>Hello!</title> <script type="text/javascript"> function bodyLoad() { var extElements = document.getElementsByTagNameNS('http://foo.com', 'bar'); alert(extElements.length); } </script> </head> <body onload="bodyLoad();"> <foo:bar>First Foo-Bar</foo:bar> <foo:bar>Second Foo-Bar</foo:bar> <foo:bar>Third Foo-Bar</foo:bar> </body> </html>

1 个答案:

答案 0 :(得分:3)

您可能使用错误的内容类型提供文档。浏览器必须将其视为XML才能识别名称空间,因此您需要使用application/xhtml+xml或其他XML内容类型,而不是text/html

顺便说一下,你的Doctype错了。如果您想使用DTD,那么您将需要一个包含您在foo命名空间中使用的元素的DTD。如果不这样做,那么只需删除Doctype - 它与XML文档中的呈现模式无关(同样,text/html文档被视为标记汤,而不是XML)。