2010-01-19 61 views
3

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

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

我该如何处理?

+3

你究竟在做什么?有可能有更好的方法来解决真正的问题,而不使用任何一个。 – Nickolay 2010-01-20 00:06:05

回答

0

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

但是,一个更简单的解决方案是尝试运行其中的一个,如果您得到nothing/null /错误,请使用另一个。无论如何,如果你真的不想自己处理它,你应该使用一个库来处理它(例如,jQuery)。

5

尝试这样的:

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

或较短的版本

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

谢谢,但仍然不适用于Chrom和Safari – Jason 2010-01-20 08:59:53

+0

我刚刚检查过,它适用于Chrome,我敢打赌它也适用于Safari。 – kjagiello 2010-01-20 12:12:19

+0

解决它,而不使用任何这些 – Jason 2010-01-26 08:54:17

3

document.getElementsByTagName()完美的作品在所有现代浏览器(IE5比一切更新)。

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

0

虽然我不会鼓励你去做一个document.all,因为它意味着你正在做很多客户端解析,这只是不需要我知道有很多遗留的东西在那里等我想在document.all的包装器方法上发表我的想法的一点点延伸。

document.all = document.all || function(){ 
    return document.getElementsByTagName("*"); 
}; 

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

+0

请注意,在Chrome上,“document.all”的计算结果为false。你需要做一些像'document.all!== undefined',或者一个简短的版本,'all'in document'来检查它的存在。 – 2013-05-16 14:55:44

-1

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

但仍然如果您想使用document.all然后看它<!DOCTYPE>标记已从您的页面中删除,并且xmlns属性也从您的<html>标记中删除。

改变任何事情是这样的:

<!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> 

我已经测试了火狐19.0.2和document.all工作正常,我。

原因:当您使用<!DOCTYPE>标签,你是在告诉你的网页是投诉它告诉你不要在你的脚本中使用document.all标准的浏览器,因此浏览器也不允许这样做。

但是,正如你想使用它,你显然不遵循标准,所以甚至不打扰添加<!DOCTYPE>标签,否则document.all将无法​​正常工作。

+2

你是认真的吗?如何使用'document.getElementById()'来选择所有元素,为什么你认为删除doctype是一个好主意? – BoltClock 2013-03-16 13:25:55

0

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

首先是原始问题。我的解决方案是(并且在我自己的代码中,等待我在本网站上发布的一个问题的答案)document.getElementsByTagName(“*”),它实际上获取了Chrome上的每个元素。我在谷歌浏览器上的google.com上测试了它,并加载了一个配置文件,并列出了八个最常见的访问网站,并提供了356个带有标签名称的单个元素。公平地说,这包括HTML,头部,身体和其他可能没用的东西,但它仍然有它们。目前我无法访问Opera,但Chrome仍然接受这段JavaScript代码,但我没有看到它不接受代码中的原因。

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

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

相关问题