javascript - (X)HTML 文档中的 getElementsByTagNameNS

标签 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://example.com">
    <head>
        <title>Hello!</title>

        <script type="text/javascript">
        function bodyLoad() {
            var extElements = document.getElementsByTagNameNS('http://example.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>

最佳答案

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

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

关于javascript - (X)HTML 文档中的 getElementsByTagNameNS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3793672/

相关文章:

javascript - 如何使用模型驱动/ react 形式修改指令中的输入值

javascript - 我们如何调整 sap.m.table 中行的高度?

html - 如何使无序列表保持在屏幕中心?

html - 是否可以在 <pre> 标签内使用 CDATA

javascript - 为什么不需要 getElementById 来获取表单中的 ID

javascript - 如何与来自 Cheerp/js 的外部变量交互?

javascript - 我可以使用 javascript 捕获和保存网页的当前状态吗

javascript - 静态元素和动态元素的 CSS 样式区别

javascript - 修改将 .data 转换为 javascript 的 jquery 代码

javascript - 如何通过 jquery/javascript 在 <head> 中添加任何内容?