一、呈现模式

  从 IE6 开始开始区分标准模式和混杂模式(怪异模式),主要是看文档的声明。

  IE 为document 对象添加了一个名为 compatMode 属性,这个属性可以识别 IE 浏览器的文档处于什么模式,如果是标准模式,则返回 CSS1Compat,如果是混杂模式则返回 BackCompat。

<script>
window.onload =function(){
alert(document.compatMode);//文档声明没错就是标准模式,去掉文档声明就变成怪异模式
}
</script>
<script>
 window.onload =function(){
if (document.compatMode == 'CSS1Compat') {
alert(document.documentElement.clientWidth);//如果是混杂模式下IE6,7,8为0,其他正常
} else {
alert(document.body.clientWidth);//如果是混杂模式下用这个方法可以使IE也是正常的
}
}
</script>

  后来 Firefox、Opera 和 Chrome 都实现了这个属性。从 IE8 后,又引入 documentMode新属性,因为 IE8 有 3 种呈现模式分别为标准模式 8,仿真模式 7,混杂模式 5。

  所以如果想测试 IE8 的标准模式,就判断 document.documentMode > 7 即可。

 二、滚动

  DOM 提供了一些滚动页面的方法,如下:

<script>
window.onload =function(){
var box = document.getElementById("box");
box.scrollIntoView(); //设置指定可见,当下面的内容需要将滚动条拉下来才可以看到的时候,只用该方法,当刷新页面的时候滚动条会自动下来,从而看到下面的内容
};
</script>
</head>
<body>
<p>1</p>
<p>1</p>
<p>1</p>
<p>1</p><p>1</p>
<p>1</p>
<p>1</p>
<p>1</p>
<p>1</p>
<p>1</p>
<p>1</p>
<p>1</p>
<p>1</p>
<p>1</p>
<p>1</p>
<p>1</p>
<p>1</p>
<p>1</p>
<div id="box">测试Div</div>
</body>

三、children 属性

  由于子节点空白问题,IE 和其他浏览器解释不一致。虽然可以过滤掉,但如果只是想得到有效子节点,可以使用 children 属性,支持的浏览器为:IE5+、Firefox3.5+、Safari2+、Opera8+和 Chrome,这个属性是非标准的。

<script>
window.onload =function(){
var box = document.getElementById("box");
alert(box.children.length); //得到有效子节点数目
alert(box.children[0]);//获取第一个有效子节点
alert(box.children[0].nodeName);
};
</script>
</head>
<body>
<div id="box">
<p>测试Div</p>
<p>测试Div</p>
<p>测试Div</p>
</div>
</body>

四、contains()方法

  判断一个节点是不是另一个节点的后代,我们可以使用 contains()方法。这个方法是 IE率先使用的,开发人员无须遍历即可获取此信息。火狐旧版本不支持,苹果3.0及以上才支持

<script>
window.onload =function(){
var box = document.getElementById("box");
var p = box.firstChild;
alert(box.contains(p));//判断box是不是p的父节点
};
</script>
</head>
<body>
<div id="box"><p>测试Div</p></div>
</body>

  在 Firefox 的 DOM3 级实现中提供了一个替代的方法 compareDocumentPosition()方法。这个方法确定两个节点之间的关系。

<script>
window.onload =function(){
var box = document.getElementById("box");
var p = box.firstChild;
alert(box.compareDocumentPosition(p));//
};
</script>
</head>
<body>
<div id="box"><p>测试Div</p></div>
</body>

  为什么会出现 20,那是因为满足了 4 和 16 两项,最后相加了。为了能让所有浏览器都可以兼容,我们必须写一个兼容性的函数。

  

JavaScript的DOM_其他的扩展的更多相关文章

  1. ExtJS学习-----------Ext.String,ExtJS对javascript中的String的扩展

    关于ExtJS对javascript中的String的扩展,能够參考其帮助文档,文档下载地址:http://download.csdn.net/detail/z1137730824/7748893 以 ...

  2. ExtJS学习-----------Ext.Array,ExtJS对javascript中的Array的扩展

    关于ExtJS对javascript中的Array的扩展.能够參考其帮助文档,文档下载地址:http://download.csdn.net/detail/z1137730824/7748893 因为 ...

  3. ExtJS学习-----------Ext.Number,ExtJS对javascript中的Number的扩展

    关于ExtJS对javascript中的Number的扩展,能够參考其帮助文档,文档下载地址:http://download.csdn.net/detail/z1137730824/7748893 以 ...

  4. ExtJS学习-----------Ext.Object,ExtJS对javascript中的Object的扩展

    关于ExtJS对javascript中的Object的扩展.能够參考其帮助文档,文档下载地址:http://download.csdn.net/detail/z1137730824/7748893 以 ...

  5. 关于ExtJS对javascript中的Object的扩展

    关于ExtJS对javascript中的Object的扩展,可以参考其帮助文档,文档下载地址:http://download.csdn.net/detail/z1137730824/7748893 下 ...

  6. JavaScript的DOM_节点类型的扩展

    DOM 自身存在很多类型,比如 Element 类型(元素节点)再比如 Text 类型(文本节点).DOM 还提供了一些扩展功能. 一.Node类型 Node 接口是 DOM1 级就定义了,Node ...

  7. 《JAVASCRIPT高级程序设计》DOM扩展

    虽然DOM为XML及HTML文档交互制定了一系列的API,但仍然有几个规范对标准的DOM进行了扩展.这些扩展中,有很多是浏览器专有的,但后来成了事实标准,于是其他浏览器也提供了相同的实现:浏览器开发商 ...

  8. JavaScript:学习笔记(8)——对象扩展运算符

    JavaScript:学习笔记(8)——扩展运算符 对象的扩展运算符 扩展运算符是三个点(...).用于取出参数对象的所有可遍历属性,然后拷贝到当前对象之中. 如上图所示,新建了一个对象a,然后通过扩 ...

  9. javascript ES6 新特性之 扩展运算符 三个点 ...

    对于 ES6 新特性中的 ... 可以简单的理解为下面一句话就可以了: 对象中的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中. 作用类似于 Object.assign() ...

随机推荐

  1. Xcode插件路径、缓存路径、图片压缩工具路径、代码片段路径、symbolicatecrash路径

    Xcode插件路径 ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins   Xcode缓存路径 ~/Library/Devel ...

  2. linux系统更改当前主机名

    问题描述:CentOS系统,默认的主机名为localhost.localdomain,刚开始安装的时候会提示修改,但是有时候会忽略,那安装好后怎么修改呢? 解决方法: 1.以根用户登录,输入hostn ...

  3. web.xml配置文件中async-supported报错解决

    项目中配置spring时async-supported报错: 是因为<async-supported>true</async-supported>是web.xml 3.0的新特 ...

  4. 用图片替代cursor光标样式

    鼠标光标样式有限,可参考http://css-cursor.techstream.org/,自定义光标样式可用设置cursor:url('xxx.cur'),auto;.还有一种办法,就是用图片替代鼠 ...

  5. java实现mysql的备份还原

    此文章是基于 1. 搭建Jquery+SpringMVC+Spring+Hibernate+MySQL平台 2. jquery+springMVC实现文件上传 一. 简介 备份和导入是一个互逆的过程. ...

  6. Java多线程系列--CopyOnWriteArraySet

    转载:http://www.cnblogs.com/skywang12345/p/3498497.html 概要 本章是JUC系列中的CopyOnWriteArraySet篇.接下来,会先对CopyO ...

  7. Effective C++ .09 不在构造和析构过程中调用virtual函数

    看过C++对象模型的话就可以知道,在构造基类时,完整的vtable没有建立起来(表项没有被相应的子类函数替换),因而无法调用到子类的函数(即构造函数中的virtual函数是本类里的方法,不是virtu ...

  8. phpmyadmin数据表结构没有显示注释列

    新开的一个项目,用phpmyadmin作为图形化操作数据库工具.创建数据表时为其每列添加好注释,浏览数据表内容有显示注释内容,但是查看数据表结构没有显示注释列,不方便直观查看数据表每列的意思. 上网搜 ...

  9. vue学习笔记(一)

    一.MVC 和 MVVM 的区别 MVC: Model(模型)应用程序中用于处理应用程序数据逻辑的部分(通常模型对象负责在数据库中存取数据). View(视图)显示数据(通常视图是依据模型数据创建的) ...

  10. 如何解决织梦DedeCMS后台模块管理列表不显示

    在使用织梦Dedecms的过程中,我们会遇到模块管理列表无法显示的问题,造成织梦模块管理列表无法显示的原因,可能有很多种,现小编总结了遇到过的一种方法仅供参考. 方法步骤一: 由于/data/modu ...