document.getElementsByTagName(“*”)或document.all

时间:2010-01-19 18:27:25

标签: javascript google-chrome firefox dom cross-browser

document.getElementsByTagName("*")适用于IE / Firefox / Opera,但不适用于Chrome和Safari。

document.all适用于IE / Chrom / Safari,但不适用于Firefox。

我该如何处理?

6 个答案:

答案 0 :(得分:5)

试试这样:

if (document.all !== undefined)
{
   allElements = document.all;
}
else
{
   allElements = document.getElementsByTagName("*");
}

或更短的版本

allElements = document.all ? document.all : document.getElementsByTagName("*");

答案 1 :(得分:3)

document.getElementsByTagName()适用于所有现代浏览器(比IE5更新的一切)。

如果它似乎无法在Chrome或Safari中使用,那么它很可能只是您在其他地方出现错误的症状。

答案 2 :(得分:0)

我承认今天可能有一些我不知道的技术允许这种事情以跨浏览器格式完成,但我过去总是不得不这样做的方法是检查您正在使用哪种浏览器。

更简单的解决方案是尝试运行其中一个,如果没有/ null /错误,请使用另一个。

无论如何,如果你真的不想自己处理它,你应该使用一个能够为你处理它的库(例如,jQuery)。

答案 3 :(得分:0)

虽然我不鼓励你做一个文档。但是因为它暗示你正在做很多客户端解析而不需要我知道那里有很多遗留的东西等我想要在document.all。

的包装器方法上发布我的想法的一点扩展
document.all = document.all || function(){
   return document.getElementsByTagName("*");
};

当然这假设你有一个getElementsByTagName函数,应该是这种情况。

答案 4 :(得分:0)

如果没有足够的代表评论@Khurram Hassan的回答,我会把它放在这里,以及我对原始问题的回答。

首先,原始问题。我的解决方案是(并且在我自己的代码中,等待我在这个网站上提出的问题的答案)document.getElementsByTagName(“*”),它实际上确实获得了Chrome上的每个元素。我在谷歌浏览器上的google.com上测试了它,其中列出了已加载的个人资料和列出的八个最常见的访问网站,并且它出现了356个带有标记名称的单个元素。公平地说,这包括html,head,body和其他可能没用的东西,但它仍然有它们。目前我无法访问Opera,但Chrome仍然接受了那段JavaScript,我没有看到为什么它不会在你的代码中接受它。

其次,对于@Khurram hassan,document.getElementById()在这种情况下不能使用。我刚刚在Chrome上测试过它,它的值为null。从理论上讲,在这种情况下,可能会使用getElementsBy*而不是getElementBy*的一般形式的任何东西。因此,要添加到我之前的答案中,您还可以尝试ClassNameNameTagNameNS,具体取决于您要执行的操作。在与以前相同的页面上,我测试了这三个,虽然只有TagNameNS工作,但其余的只返回空列表,而不是错误。

此外,如果您的代码中不需要<!DOCTYPE html>,那么您可以将工作代码作为编辑发布到您的答案中,以便我们可以看到它。据我所知,<!DOCTYPE html>似乎是普遍接受的(通常被认为是强制性的)启动HTML页面的方式。如果没有必要,那么这将是新的信息(至少对我来说),这些信息在未来的调试或非公共网页中都很有用。

答案 5 :(得分:-1)

应避免使用

document.all,因为它不符合标准。相反,您可以将document.getElementById()用于特定节点或使用 $("*")用于使用jQuery选择所有元素。

但是如果你想使用document.all,那么请注意,<!DOCTYPE>标记已从您的网页中删除,xmlns属性也会从<html>标记中删除。< / p>

更改此类内容:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<html>

我在FireFox 19.0.2上测试了它,document.all对我来说很好。

原因:当您使用<!DOCTYPE>标记时,您告诉浏览器您的网页投诉的标准告诉您不要在您的网站中使用document.all脚本,所以浏览器也不允许它。

但是当你想使用它时,你显然没有遵循标准,所以甚至懒得添加<!DOCTYPE>标签,否则document.all将无效。