HTML5的特性

HTML5规范定义了一系列与DOM规范重叠的API;

HTML5的规范涉及面非常广,新增的DOM API只是其一部分。

getElementsByClassName()

  1. 可以通过document和所有HTML元素对象调用此方法;

  2. 返回带有指定类的NodeList;

  3. 传入的一个字符串参数可以包含多个类; 

classList属性

  1. 所有元素都拥有,是新集合类型DOMTokenList的对象实例;
  2. 访问classList的项: []、item()、classList对象属性; 
  3. 对象属性: length;
  4. 删除一个元素多个类名中的某个类名的旧版方法:
    function removeClass(element, toDelClass){
        var classNames = element.className.split(/\s+/);
    
        var pos = -1,
            i,
            len = className.length;
    
        for(i=0; i<len; i++){
            if(classNames[i] == toDelClass){
                pos = i;
                break;
            }
        }
    
        classNames.splice(i, 1);
    
        element.className = classNames.join(' ');
    }
    
    removeClass(document.body, 'any-class');

     

  5. 使用classList对象的方法操作元素的className:

    var element = document.getElementById('myDiv');
    
    // add(value) -- 如果存在就不添加了
    element.classList.add('newClassName');  // 输出:undefined
    
    
    // contains(value)  -- 如果存在返回true,否则false
    element.classList.contains('newClassName');  // 输出:true
    
    
    // remove(value)  -- 从列表中删除给定的字符串
    element.classList.remove('newClassName');  // 输出:undefined
    
    
    // toggle(value)  -- 如果列表中存在给定值,就删除;否则,添加
    element.classList.toggle('newClassName');  // 输出:undefined

     

焦点管理

HTMLDocument的变化

readyState

  1. 属性可用于实现一个文档的加载完成指示器;
  2. loading:正在加载的文档;
  3. complete: 已经完成加载;

兼容模式

  1. document.compatMode可以侦测渲染的页面是标准模式还是混杂模式;
  2. 两个取值:CSS1Compat(标准模式)、BackCompat(混杂模式);

head属性

  1. 类似于document.body的作用,document.head用于快捷访问文档的head标签;
  2. 兼容性写法:
    var head = document.head || document.getElementsByTagName('head')[0];

     

字符集属性

  1. document.charset属性表示文档实际使用的字符集;

  2. document.charset是可写的;

  3. document.defaultCharset表示操作系统和浏览器默认的字符集,中文操作系统一般是gb2312;

自定义数据属性

  1. HTML5规定可以为元素添加非标准的属性,但需要添加前缀data-;
  2. 自定义数据属性提供的是与渲染无关,但用于存储不可见的重要数据的属性;
  3. 元素相应地增加了dataset属性来访问和编辑自定义的属性值;
    var div = document.getElementById('myDiv');
    
    // 设置值
    div.dataset.appId = 23456;
    div.dataset.myname = 'Michael';
    
    // 取得自定义属性的值
    var appId = div.dataset.appId;
    var myName = div.dataset.myname;
    
     
  4. 实际应用:可以为文档不同位置的元素添加data-属性,设置加载的百分比,然后该数据可以用于制作加载进度条;

插入标记

innerHTML

outerHTML

与innerHTML的不同的是,返回和写入调用它的元素及其子节点的HTML标签

insertAdjacentHTML()方法

  1. 所有元素新增的方法;
  2. 两个参数:插入位置、插入的HTML字符串文本;
  3. 位置参数的取值:

    beforebegin:作为前一个同辈元素插入;


    afterbegin:作为第一个子元素插入;


    beforeend:作为最后一个子元素插入;


    afterned:作为后一个同辈元素插入;

    <!DOCTYPE html>
    <html>
        <body>
            <div>123</div>
        </body>
        <script>
            var element = document.getElementsByTagName('div')[0];
            // 作为前一个同辈元素插入
            element.insertAdjacentHTML('beforebegin', '<p>beforebegin</p>');
    
            // 作为第一个子元素插入
            element.insertAdjacentHTML('afterbegin', '<p>afterbegin</p>');
    
            // 作为最后一个子元素插入
            element.insertAdjacentHTML('beforeend', '<p>beforeend</p>');
    
            // 作为后一个同辈元素插入
            element.insertAdjacentHTML('afterend', '<p>afterend</p>');
        </script>
    </html>

    举例

     

  4. 与此同时,还有insertAdjacentElement()用法与insertAdjacentHTML()一致,但第二个参数需传入元素节点。

内存与性能问题

  1. innerHTML等操作会在浏览器底层运行,效率高,但过度使用会使页面的性能表现下降;
  2. 不要频繁插入,最好将要插入的HTML先保存在一个字符串内,然后一次性插入。

scrollIntoView()

  1. HTML5为所有的元素节点新增的方法;
  2. 接收一个参数:truefalse

    true:元素顶部与视口顶部平齐;


    false:元素底部与视口底部平齐;


     

专有扩展

  1. IE文档模式属性:document.documentMode

    可以通过HTML文档头部的meta、X-UACompatible设置 

  2. children属性:
    i. HTMLCollection实例;
    ii. 与childNodes的不同点是:只包含元素的子节点;

     

  3. contains()方法——元素的新增方法:一个元素节点参数,检测是否被调用方法的元素包含;
  4. DOM Level3 为元素节点新增方法:compareDocumentPosition() 同样接收一个元素节点作为参数,返回位掩码的➕和,用于确定两个节点间的关系:
    掩码节点关系
    1无关(给定的节点不在当前文档中)
    2居前(给定的节点在DOM树中位于参考节点之前)
    4居后(给定的节点在DOM树种位于参考节点之后)
    8包含(给定的节点是参考节点的祖先)
    16被包含(给定的节点是参考节点的后代)
    <!DOCTYPE html>
    <html>
        <body>
        </body>
        <script>
            var result = document.documentElement.compareDocumentPosition(document.body);
            console.log(result);  // 输出:4+16 = 20
        </script>
    </html>

     

  5. contains()兼容代码:

    function contains(refNode, otherNode){
        if(typeof refNode.contains == 'function'){
            return refNode.contains(otherNode);
        }else if(typeof refNode.compareDocumentPosition == 'function'){
            return !!(refNode.compareDocumentPosition(otherNode) & 16);
        }else{
            var node = otherNode.parentNode;
            do{
                if(node === refNode){
                    return true;
                }else{
                    node = node.parentNode;
                }
            }while(node !== null);
    
            return false;
        }
    }

     

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mannuandeyangguang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值