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

if(document.all){
//do something in IE
}else if(document.layers){
//do something in Netscape
}

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

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

document.all的布尔值

<script type="text/javascript">
window.onload = function() {
document.getElementById("info").innerHTML = "!!document.all : " + !!document.all;
}
</script>
<span id="SPAN1"></span>
<div id="info"></div>

这个页面,在IE中的输出是:!!document.all : true
其他浏览器中:!!document.all : false
一般我们都会用一个对象的布尔值来判断它是否存在,那么通过上面的测试,是不是说明,在其他浏览器中 document.all 不存在呢??

使用documen.all获取元素的DOM对象

<html id="HTML1">
<script type="text/javascript">
window.onload = function() {
var html = "<table border='1' style='font-size:12px;'>";
function getElement(sec) {
html += "<tr><td>" + sec + "</td>" + "<td>" + eval(sec).id + "</td>";
}
getElement("document.all(0)");
getElement("document.all[0]");
getElement("document.all.item(0)");
getElement("document.all('SPAN1')");
getElement("document.all.SPAN1");
getElement("document.all['SPAN1']");
getElement("document.all.namedItem('SPAN1')");
html += "</table>";
document.getElementById("info").innerHTML = html;
}
</script>
<span id="SPAN1"></span>
<div id="info"></div>
</html>

可见,这个对象还是可以被用来取对象的,很搞笑吧。偷偷默默的把值就取到了。不过还是少用这个属性为妙,各浏览器在没有统一之前,都可能更新对它的支持,你要是用这个属性,那么相当于给自己的程序里埋了一颗很雷的地雷。小心哪天爆了。还是用document.getElementById()比较安全

转自:http://bbs.csdn.net/topics/340240354

浏览器对document.all的支持差异的更多相关文章

  1. 10、网页制作Dreamweaver(扩展:各浏览器对 onunload 事件的支持与触发条件实现有差异)

    标准参考 在 HTML 4.01 规范中关于 onunload 事件的描述是:当 document 从 window 中移除时,触发 onunload 事件. 关于 HTML 4.01 规范中 onu ...

  2. 各浏览器对 onbeforeunload 事件的支持与触发条件实现有差异

    转载:http://www.w3help.org/zh-cn/causes/BX2047 标准参考 无. 问题描述 一般情况下,onbeforeunload 事件处理函数内会写入一些提示性语句,当用户 ...

  3. Javascript检测浏览器对CSS属性的支持 /* supports */

    //检测浏览器对CSS属性的支持 supports = (function() { var div = document.createElement('div'), vendors = 'Khtml ...

  4. html5录音支持pc和Android、ios部分浏览器,微信也是支持的,JavaScript getUserMedia

    以前在前人基础上重复造了一个网页录音的轮子,顺带把github仓库使用研究了一下,扔到了github上. 优势在于结构简单,可插拔式的录音格式支持,几乎可以支持任意格式(前提有相应的编码器):默认提供 ...

  5. js里的setTimeout和setInterval之后的页面是空白,阻塞浏览器的document对象,但是不阻塞script方法

    js里的setTimeout和setInterval是否进程阻塞? 阻塞浏览器的document对象,但是不阻塞script方法 当你在setTimeout中使用document.write时是不行的 ...

  6. console.debug()浏览器控制台打印输出 仅仅在支持console的浏览器下打印

    console.debug()浏览器控制台打印输出 仅仅在支持console的浏览器下打印 var util = {}; /** * 工具类 */ util = new function() { /* ...

  7. [转]BX9054: 各浏览器对 document.execCommand 方法的首参数可选值范围存在差异

    作者:钱宝坤 标准参考 无. 问题描述 execCommand 方法通常用于控制可编辑的 IFRAME 内容,制作富文本编辑器. 但他现在为止还是非标准的,方法的首参数 Commmands 的可选值由 ...

  8. [转]JavaScript快速检测浏览器对CSS3特性的支持

    转自:https://yuguo.us/weblog/detect-css-support-in-browsers-with-javascript/ ------------------------- ...

  9. ie8及其以下浏览器的document.getElementsByClassName兼容性问题

    使用JavaScript访问DOM的一个重大问题是,此过程需要一种通过元素类名称来选择类的类函数,对DOMContentReady,这种类函数的缺失导致开发人员需要自己编写自定义脚本业执行上述任务,许 ...

随机推荐

  1. ajax 解析

    1.通过适当的Ajax应用达到更好的用户体验; 2.把以前的一些服务器负担的工作转嫁到客户端,利于客户端闲置的处理能力来处理,减轻服务器和带宽的负担,从而达到节约ISP的空间及带宽租用成本的目的. 二 ...

  2. 高德地图之c#后台获取一个或多个起点到单个终点的直线距离

    首先我们需要一个控制台添加一个新Key(可使用服务选择Web服务,测试的时候IP白名单先不填); 直线距离是通过后台get方式请求API服务地址http://restapi.amap.com/v3/d ...

  3. lua之base64加密和解密算法。

    local function encodeBase64(source_str) local b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnop ...

  4. css3边角旋转

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 为什么在 js在 function($) 前面加分号

    ;function($,undefined) 是什么用处 ? ;(function($){$.extend($.fn... 现般在一些 JQuery 函数前面有分号 在前面加分号可以有多种用途: 1. ...

  6. C语言 算平均数

    int main() { int number ; int sum = 0; int count = 0; do { scanf("%d", &number ); if( ...

  7. “全栈2019”Java第九章:解释第一个程序

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. link和@import的区别是什么 ?

    1.link是XHTML标签,除了加载CSS外,还可以定义RSS等其他事务:@import属于CSS范畴,只能加载CSS. 2.link引入CSS是,在页面载入时间同时加载:@import页面网页完全 ...

  9. PHP中implode()和explode()

    1, implode()函数返回由数组元素组合成的字符串,函数语法:string implode(separator,array),separator参数可选,规定数组元素之间放置的内容,默认是空字符 ...

  10. mysqldump导出数据不带时区信息的问题

    今天在导出数据时,发现所有timestamp字段都不带时区信息,因为我在东8区,导出的数据中所有时间都提早了8个小时 首先先看表的字段和数据 CREATE TABLE IF NOT EXISTS `a ...