11|DOM拓展

2020-05-12  本文已影响0人  井润

本节当中讲的内容其实并不多主要有以下几个方面的内容:

01|选择器API

主要介绍了两个API:

  1. querySelector 传入对应的css选择器 返回与模式匹配的第一个元素没有的话返回null
  2. querySelectorAll 返回所有的匹配元素,所有匹配元素并非一个元素而是一个NodeList的实例

02|元素遍历

其中元素遍历中不包含文本节点和注释节点

// ie9+支持
1.childElementCount // 返回子元素的个数
2.firstElementChild // 指向第一个子元素
3.lastElementChild // 指向最后一个子元素
4.previousElementSibling // 指向前一个同辈元素
5.nextElementSibling // 指向后一个同辈元素

03|与类相关的补充

1.classList.length // 返回包含元素的个数
2.classList.remove() //接收一个类名,从列表中删除给定类名
3.classList.toggle() //如果列表中存在给定的值,删除它,否则添加它
4.classList.add() //将给定的字符串添加到列表中,如果已经存在,就不添加
5.classList.contains() //表明列表中是否存在给定的值,存在则返回true,否则返回false

04|焦点管理

其中用户获取焦点的方式如下所示:

1.document.activeElement //始终会引用dom中获得焦点的元素,文档刚刚加载完成时,保存的是document.body元素的引用,文档加载期间的值为null
2.document.hasFocus() //用于确定文档是否获得了焦点,是则返回true

05|HTMLDocument的变化

    1.loading //正在加载文档,可以在onload外使用
    2.complete //文档加载完毕。只能在onload内获取
// 例子
if(document.readyState == "complete") {
    // 执行操作
}

其中兼容模式是通过compatMode

我们可以通过document.charset来获取字符集或者设置字符集 当然还能够通过document.defaultCharset获取默认的字符集

HTML5规定可以为元素添加非标准的属性,但要添加前缀data-,目的是为元素提供与渲染无关的信息,或者提供语义的信息

dataset属性的值DOMStringMap的一个实例,也就是一个键值对儿的映射!

我们可以看看对应的例子:

<div id="mydiv" data-appid="12345" data-myname="probedream"></div>
<script>
let div = document.getElementById("mydiv");
let appid = div.dataset.appid;
let myname = div.dataset.myname;
if(myname){
    console.log("Hello!")
}
myname = "Gump";
if(myname){
    console.log(myname)
}
//Hello! Gump
</script>

06|插入标记

insertAdjacentHTML()
// 1.作为前一个同辈元素被插入
el.insertAdjacentHTML('beforebegin', '<p>hello world</p>');
// 2.作为第一个子元素被插入
el.insertAdjacentHTML('afterbegin', '<p>hello world</p>');
// 3.作为最后一个子元素被插入
el.insertAdjacentHTML('beforeend', '<p>hello world</p>');
// 4.作为后一个同辈元素被插入
el.insertAdjacentHTML('afterend', '<p>hello world</p>');
<div id="d">
    <p>Content</p>
    <p>Further Elaborated</p>
</div>
<script>
    const d = document.getElementById("d");
    console.log(d.outerHTML);
//<div id="d"><p>Content</p><p>Further Elaborated</p></div>    
</script>

其中的性能问题:

使用以上三个方法,特别是innerHTML再我们同样修改页面内容特别是DOM操作频繁的时候innerHTML性能上面还是挺不错的!

滚动页面的一个方法,也是HTML5新增的一个方法作为标准方法而存在!

07|children

// 获取元素集合,只包含元素节点
el.children.length | el.children[i]

08|contains 判断某一个节点是否是另外节点的后代

parentEl.contains(childEl); // 如果childEl是parentEl的后代,则返回true

补充:其中还有一些我们常常用到的比较重要的点

这就是JavaScript高级程序设计中第十一章讲解到的大致内容了!

上一篇下一篇

猜你喜欢

热点阅读