document.all的详细解释(document.all基本上所有浏览器可用!)

document.all的详细解释(document.all基本上所有浏览器可用!)从何而来从IE4开始IE的objectmodel才增加了document.all对象,MSDN中也对Object.all有详细的说明,Object.all是个HTMLCollection,不是数组,它包含document.all:http://msdn.microsoft.com/en-us/library/ms537434%28VS.85%29.aspx自他出现后,IE后续版本也…

大家好,又见面了,我是你们的朋友全栈君。

从何而来
从IE4开始IE的object model才增加了document.all对象,MSDN中也对 Object.all 有详细的说明,Object.all是个HTMLCollection,不是数组,它包含document.all:
http://msdn.microsoft.com/en-us/library/ms537434%28VS.85%29.aspx
自他出现后,IE后续版本也对其做了很好的支持,并没有打算放弃这个很有意义的属性。曾有一段时间,这个属性连同document.Layers 还被用作Netscape浏览器和IE浏览器的类型判断杀手锏,可惜的是 document.Layers 已经作古,document.all 大有从嫔妃转为正宫之势(Xee:已经转正了!)。

 

if(document.all){

//do something in IE

}else if(document.layers){

//do something in Netscape

}

经典的浏览器类型判断…… 已经作古,切莫使用,后果自负……

————————————————————————

document.all是IE 4.0及以上版本的专有属性,是一个表示当前文档的所有对象的娄组,不仅包括页面上可见的实体对象,还包括一些不可见的对象,比如html注释等等。在document.all数组里面,元素不分层次,是按照其在文档中出现的先后顺序,平行地罗列的。所以可以用数字索引来引用到任何一个元素。但比较常用的是用对象id来引用一个特定的对象,比如document.all[“element”]这样。
document.layers是Netscape 4.x专有的属性,是一个代表所有由储如<div><layer>等定位了的元素的数组。通常也是用<div>或<layer>对象的id属性来引用的,但是这里面不包含除此以外的其它元素。
其实这两个属性没什么可比性,大概你经常看到他们同时出时,这有一个历史原因。在第四代浏览器出现的时候,标准相当混乱,Netscape和微软分别推出了它们的Navigator 4.x和IE 4.0,这两个浏览器的巨大差异,也使开发者面临了一个使网页跨浏览器兼容的噩梦。而document.layer和document.all分别是两者一个最显著的标志,为了确定浏览者使用的什么浏览器,通常用是否存在document.layers和document.all来判断。
新的统一的标准用document.getElementById等系列方法来引用DOM对象,而且Netscape 6.0以后放弃了layers特征,虽然IE继续保留了document.all,但这最终没有成为DOM标准的一部分。希望document.layers和document.all能够早日作古,让标准早日深入人心!

—————————————————————————–

发展壮大
开始的时候,确实其他浏览器都不支持document.all,但是渐渐的,都开始偷偷摸摸的开始支持了。
因为它不是W3C的标准属性,在其他浏览器中也没有找到此集合属性的说明。说它偷偷摸摸的被支持是有原因的。

例1(这个可以让你理解文档中哪些是对象)

<!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">
<head>
<title>Document.All Example</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
</head>
<body>
<h1>Example Heading</h1>
<hr />
<p>This is a <em>paragraph</em>. It is only a <em>paragraph.</em></p>
<p>Yet another <em>paragraph.</em></p>
<p>This final <em>paragraph</em> has <em id="special">special emphasis.</em></p>
<hr />
<script type="text/javascript">
<!--
var i,origLength;
origLength = document.all.length;
document.write('document.all.length='+origLength+"<br />");
for (i = 0; i < origLength; i++)
{
document.write("document.all["+i+"]="+document.all[i].tagName+"<br />");
}
//-->
</script>
</body>
</html>

至于结果,自己去看看各个浏览器的差异,以前的浏览器(可能是lt IE8之前)会显示document.all.length=18(妈蛋,这样子:image);现代浏览器统一显示document.all.length=17image,自己看看区别吧…

——————————————————————————————————————–

下面是关于document.all的其他用处…:

一.
document.all是页面内所有元素的一个集合。例如:      
document.all(0)表示页面内第一个元素
二.
document.all可以判断浏览器是否是IE(其实还有其他方法不断可以判断IE,还可以判断是哪个版本的IE…自行百度吧…)

if(document.all){   
    alert('IS IE!');   
  }

else{

    alert('NOT IE!');

}

关于这个问题,我进行了测试,在所有现在浏览器(除IE)下,显示为:

typeof(document.all)
“undefined”

在IE(包括IE9~IE10,IE11没测试,根据微软的尿性,估计也一样)下:

typeof(document.all)
“object”

所以..判断为IE

附录:

从IE11、Chrome开始,document.all将返回HTMLCollection子类HTMLAllCollection的对象,其行为特征和HTMLCollection一致。(Xee:IE11之前的版本document.all返回HTMLCollection的对象)但IE11中的HTMLAllCollection还可以当作函数使用。

 

三.
也可以通过给某个元素设置id属性(id=aaaa),然后用document.all.aaaa调用该元素。

标准DOM中的访问方法

开头就说过document.all[]不符合WEB标准(Xee:现在的浏览器基本都支持了),那用什么来替代它呢?document.getElementById

Most third-party browsers are “strict standards” implementations, meaning that they implement W3C and ECMA standards and ignore most of the proprietary object models of Internet Explorer and Netscape.If the demographic for your Web site includes users likely to use less common browsers, such as Linux aficionados, it might be a good idea to avoid IE-specific features and use the W3C DOM instead. by Internet Explorer 6, we see that IE implements significant portions of the W3C DOM.

这段话的意思是大多数第三方浏览器只支持W3C的DOM,如果你的网站用户使用其他的浏览器,那么你最好避免使用IE的私有属性。而且IE6也开始支持W3C DOM。

毕竟大多数人还不了解标准,在使用标准前,你还可以在你的网页中用document.all[]访问文档对象,

原生JS(标准的访问方法)有3种方式来获取元素:

getElementById('id') 
getElementsByName('name') 
getElementsByTagName('tag') 
getElementById是获取元素最快的方式。

因为不是w3c标准,所以我尽量避免使用document.all(Xee:现在已经可以完全使用了,IE所有浏览器支持!)

<参考:http://www.cnblogs.com/zwl12549/archive/2007/07/09/811141.aspx & http://www.jb51.net/article/29091.htm>

转载于:https://www.cnblogs.com/ChandlerVer5/p/js_document.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158181.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 站长工具之在线检测网页错误

    站长工具之在线检测网页错误网页代码测试工具  没有站长可以保证自己的网页代码完全正确没有任何错误,特别是是否符合W3C标准,你可以通过以下测试来检查网站代码是否正确,无论你是asp的还是php的都可以哟。  1.http://www.htmlhelp.com/tools/validator一个很好的工具,能找出网站语法错误的地方,并标注出来,也可选择对网站上单独的每一页进行单页分析。(强烈推荐)

    2022年7月22日
  • django动态路由_路由器和转换器的区别

    django动态路由_路由器和转换器的区别自定义路径转换器有时候上面的内置的url转换器并不能满足我们的需求,因此django给我们提供了一个接口可以让我们自己定义自己的url转换器django内置的路径转换器源码解析在我们自定义路由转

    2022年7月30日
  • 从零和使用mxnet实现dropout

    需求:从零和使用mxnet实现dropout数据集:使用load_digits()手写数字数据集要求:使用1个掩藏层n_hidden1=36,激活函数为relu,损失函数为softmax

    2021年12月30日
  • torch torchvision 下载安装与使用

    torch torchvision 下载安装与使用本文仅供学习交流使用,如侵立删!联系方式及demo下载见文末torch和torchvision版本对应关系表torch下载官方下载地址:https://download.pytorch.org/whl/torch_stable.html选择对应版本下载即可torch安装安装命令:pipinstalltorch-1.5.1+cpu-cp36-cp36m-win_amd64.whlpipinstalltorchvision-0.6.0+cpu-cp36-cp

    2022年6月24日
  • ASMM、AMM_AMS5666

    ASMM、AMM_AMS56661自动内存管理(AMM):就是在总的内存不变的状态下,实现了内存组件之间的优化配置。不会造成内存溢出的错误。SGA和PGA之间以及SGA内部组件都可以进行内存的储备调整。通过MEMORY_TARGET启用的。2自动共享内存管理(ASMM):是在共享池、高速缓冲区、大池、JAVA池和流池之间进行内存动态重新分配,以提高内存的使用效率。AS

    2022年10月28日
  • SQL 笛卡尔积现象

    SQL 笛卡尔积现象笛卡尔积的出现是在多表进行联合查询的时候会出现的一种情况。比如有两张表:表一:表二:在进行查询的时候:selectstudentname,SubjectnamefromStudent,subject会出现下面的情形,也就是笛卡尔现象,表一有5条记录,表二有3条记录,那么对于第一张表而言有5种选择,而对于第二张表来说有3种选择。所以结果就是5*3种选…

    2022年7月27日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号