document.getElementsByTagName("*")
适用于IE/Firefox/Opera,但不适用于Chrome和Safari。document.getElementsByTagName(“*”)或document.all
document.all
适用于IE/Chrom/Safari,但不适用于Firefox。
我该如何处理?
document.getElementsByTagName("*")
适用于IE/Firefox/Opera,但不适用于Chrome和Safari。document.getElementsByTagName(“*”)或document.all
document.all
适用于IE/Chrom/Safari,但不适用于Firefox。
我该如何处理?
我承认今天可能有些技术我不知道,这种技术可以用跨浏览器的格式完成,但我过去总是这样做的方式是请检查您正在使用的浏览器。
但是,一个更简单的解决方案是尝试运行其中的一个,如果您得到nothing/null /错误,请使用另一个。无论如何,如果你真的不想自己处理它,你应该使用一个库来处理它(例如,jQuery)。
尝试这样的:
if (document.all !== undefined)
{
allElements = document.all;
}
else
{
allElements = document.getElementsByTagName("*");
}
或较短的版本
allElements = document.all ? document.all : document.getElementsByTagName("*");
document.getElementsByTagName()
完美的作品在所有现代浏览器(IE5比一切更新)。
如果它在Chrome或Safari中似乎不起作用,那么它很可能只是您在其他地方出现错误的症状。
虽然我不会鼓励你去做一个document.all,因为它意味着你正在做很多客户端解析,这只是不需要我知道有很多遗留的东西在那里等我想在document.all的包装器方法上发表我的想法的一点点延伸。
document.all = document.all || function(){
return document.getElementsByTagName("*");
};
当然,这里假设你有一个getElementsByTagName函数,应该是这种情况。
请注意,在Chrome上,“document.all”的计算结果为false。你需要做一些像'document.all!== undefined',或者一个简短的版本,'all'in document'来检查它的存在。 – 2013-05-16 14:55:44
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
将无法正常工作。
你是认真的吗?如何使用'document.getElementById()'来选择所有元素,为什么你认为删除doctype是一个好主意? – BoltClock 2013-03-16 13:25:55
没有足够的代表评论@Khurram Hassan的回答,我会把它放在这里,以及我对原始问题的回答。
首先是原始问题。我的解决方案是(并且在我自己的代码中,等待我在本网站上发布的一个问题的答案)document.getElementsByTagName(“*”),它实际上获取了Chrome上的每个元素。我在谷歌浏览器上的google.com上测试了它,并加载了一个配置文件,并列出了八个最常见的访问网站,并提供了356个带有标签名称的单个元素。公平地说,这包括HTML,头部,身体和其他可能没用的东西,但它仍然有它们。目前我无法访问Opera,但Chrome仍然接受这段JavaScript代码,但我没有看到它不接受代码中的原因。
二,对于@Khurram hassan,document.getElementById()
不能在这种情况下使用。我只是在Chrome上进行了测试,结果它的值为null。从理论上讲,任何一般形式的getElementsBy*
而不是getElementBy*
都可能用于这种情况。因此,要添加到我之前的回答中,您可能还会尝试ClassName
,Name
和TagNameNS
,具体取决于您要做什么。在与之前相同的页面上,我测试了这三个,虽然只有TagNameNS
工作,其余的只是返回空列表,而不是错误。
此外,如果在代码中确实不需要<!DOCTYPE html>
,也许可以将工作代码作为编辑发布到您的答案中,以便我们可以看到它。据我所知,<!DOCTYPE html>
似乎是开始HTML页面的普遍接受(通常被认为是强制性的)方式。如果没有必要,那么这将是新的信息(至少对我而言),可以在调试或非公开的网页中证明有用。
你究竟在做什么?有可能有更好的方法来解决真正的问题,而不使用任何一个。 – Nickolay 2010-01-20 00:06:05