《JS高程(3)》DOM扩展-专有扩展-第11章笔记(21)

向DOM中添加专有扩展,以弥补功能上的不足。

文档模式

IE8引入了一个新的概念叫“文档模式”,页面的文档模式决定了可以使用什么功能,文档模式决定了你可以使用哪个级别的CSS,可以在JavaScript中可以使用哪些API,以及如何对待文档类型,到了IE9,总共有4中文档模式。

children属性

children属性时HTMLCollection的实例,只包含元素中同样还是元素的子节点,除此之外,children属性与childNodes没有什么区别

var childCount = element.children.length;
var childCount = element.children[0];
contains()方法

用于确认某个节点是不是另一个节点的后代。
祖先节点调用contain()方法,也就是搜索开始的节点,接受一个参数,既要检测的后代节点。
如果被检测的节点是后代节点,该方法返回true,否则返回false:

alert(document.documentElement.contains(document.body));//true

测试<body>元素是不是<html>元素的后代,在格式正确的HTML页面中,以上代码返回true。支持contains()方法的浏览器有IE、Firefox9+、Safari、Opera和Chrome.
使用DOMLevel3 compareDocumentPosition()也能够确定节点间的关系。

掩码节点关系
1无关(给定的节点不在当前文档中)
2居前(给定的节点DOM树中位于参考节点之前)
4居后(给定的节点DOM树中位于参考节点之后)
8包含(给定的节点是参考节点的祖先)
16被包含(给定的节点是参考节点的后代)

为模仿contains()方法,应该关注的是掩码16。可以对compareDocumentPostion()的结果执行按位与,已确定参考节点(调用compareDocumentPosition()方法的当前节点)是否包含给定的节点(传入的节点)。

var result = document.documentElement.compareDocumentPosition(document.body);
alert(!!(result & 16));
//第一个参数是参考节点,第二个参数是要检查的节点
function contains(refNode, otherNode){
//检测refNode中是否存在contains()方法(能力检测)
    if(typeof reNode.contains == "function" && 
    //检测当前浏览器所用的webkit版本号,版本号>=522则继续执行
(!client.engine.webkit || client.engine.webkit >= 522)){
    return refNode.contains (otherNode);
    //检测refNode中是否存在compareDocumentPosition ()方法(能力检测)
    }else if(typeof refNode.compareDocumentPosition =="function"){
    return !! (refNode.compareDocumentPosition(otherNode) & 16);
    }else{
        var node =otherNode.parentNods;
        do{
            if(node === refNode){
                return true;
            }else{
                node = node.parentNode;
            }
        }while (node !== null);
        return false;
    }
}
插入文本
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值