【发布时间】:2014-03-25 15:15:05
【问题描述】:
这是一段可以追溯到 Netscape Navigator 时代的 js 代码。我无法弄清楚或找到这个人这样做的原因。
function id(i)
{
var e;
if (document.getElementById)
return document.getElementById(i);
else if (document.all)
return document.all[i];
else if (document.layers)
return document.layers[i];
return null;
}
在较新的浏览器中,if(document.getElementById) 总是正确的。看起来它正在检查该功能是否存在,但我不确定。
我问的原因是因为这段代码从浏览器 IE8 及以下版本中读取了不应具有 name 属性的元素的 name(not id)。我的任务是尝试让它在较新的浏览器上更有效地工作。但首先,我真的需要了解这段代码的含义。
从<tr> 等属性读取name 是在其他地方完成的,这是一个非常简单的修复,将其用作自定义属性。我包含的这一部分涉及更多部分,并不那么简单。
【问题讨论】:
-
“看起来它正在检查该功能是否存在,但我不太确定。” Bingo
-
距离我上次使用 JavaScript 已经过去了大约 5 年,但是是的,我记得在使用旧版浏览器时遇到了问题,并且
document.getElementById。我认为他只是试图让它在旧版浏览器上运行。 -
有人解释了 document.all 在这里 - stackoverflow.com/questions/2408424/…
-
覆盖netscape navigator等getElementById方式。不同的浏览器用来实现这个对象的方式不同。我认为这不再相关,getElementById 应该可以正常工作。
-
正如 Axel 所说,这是一张支票。 JavaScript 支持因浏览器而异。这意味着用户在继续使用代码之前必须进行大量检查。基本上,该代码检查是否支持
getElementById()选择器。如果未找到,则检查是否支持document.all。最后它检查对document.layers的支持。这可以追溯到第一个 JavaScript 库出现之前。这样的回忆。
标签: javascript legacy