js红宝石 第15章-DOM扩展

08年以前,大多数对于DOM的扩展是浏览器专有的.但是W3C着手于把这些扩展编为正式规范

15.1 SelectorsAPI

15.1.1 querySelector()

querySelector()接收CSS选择符参数

      // 取得<body>
      let body = document.querySelector('body')

      // 取得ID为"MyDiv"的元素
      let MyDiv = document.querySelector('#MyDiv')

      // 取得类名为"selected"的第一个元素
      let selected = document.querySelector('selected')

      //取得类型为img且类名为"button"的图片
      let img = document.querySelector('img.button')

15.1.2 querySelectorAll()

参数和querySelector()一样,但是返回NodeList实例

可以通过for-of/item()或中括号取得个别元素

15.1.3 matches()

接收CSS选择符参数,返回布尔值,表示元素是否匹配

15.2 元素遍历

ElementTraversalAPI为DOM元素添加了5个属性

childElementCount 返回子元素个数(不包含文本和注释)

firstElementChild 指向第一个Element类型的子元素

lastElementChild 指向最后一个Element类型的子元素

previousElementSibling 指向前一个Element类型的兄弟

nextElementSibling 指向后一个Element类型的兄弟

15.3 HTML5

H5包含了大量JSAPI定义

15.3.1 CSS类拓展

1.getElementsByClassName()

只会返回调用它的对象的所有子结点中匹配的元素

2.classList属性

操作类名

新增方法:
add(value) 不存在则添加,存在则不变

contains(value) 存在则true,否则false

remove(value) 移除value元素

toggle(value) 有则删除,没有则添加

15.3.2 焦点管理

activeElement  返回拥有focus()的元素

hasFocus() 返回布尔值

15.3.3 HTML Document扩展

1.readyState属性

loading 表示文档正在加载

complete 表示文档加载完成

2.compatMode

指示浏览器处于什么渲染模式

3.head

document.head可以直接获取<head>

15.3.4 字符集属性

characterSet表示实际使用的字符集,默认是"UTF-16"

但可以通过<meta>元素/响应头和characterSet修改

15.3.5 自定义数据属性

在属性名称前加 data- 告知

自定义属性会被存入

data-my-name 要使用 myName访问

15.3.6 插入标记

1.innerHTML属性

读取innerHTML属性时,会返回所有后代HTML的字符串

  <body>
    <div class="box">
      <p>123</p>
      <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
      </ul>
    </div>
    <script>
      // 取得<body>
      let box = document.querySelector('.box')

      console.log(box.innerHTML);
    </script>
  </body>

 

 2.outerHTML属性

会返回自身及后代HTML的字符串

 

可以使用 outerHTML创建当前元素的外部HTML

和createElement + appendChild 效果相同

3.insertAdjacentHTML()和insertAdjacentText()

插入标签

接收两个参数:要插入标记的位置  要插入的HTML/Text

第一个参数必须是以下值之一:

beforebegin 当前元素前面,作为同胞节点

afterbegin 当前元素后面,作为子节点

beforeend 当前元素内部,作为之后一个子节点

afterend 当前元素后面,作为下一个同胞节点

4.内存与性能

插入大量新HTML时使用innerHTML比操作DOM便捷

提高innerHTML的效率

      let itemsHTML = ""
      for(let value of values){
        itemsHTML+=`<li>${value}</li>`
      }
      ul.innerHTML = itemsHTML

5.跨站点脚本

如果要使用用户提供的信息,则不建议使用innerHTML,可能遭受到XSS攻击

15.3.7 scrollIntoView()

可以滚动浏览器窗口或容器元素以便包含元素进入视口

参数如下:

alignToTop:

true 滚动后顶部与视口顶部平齐

false 滚动后底部与视口底部平齐

scrollIntoViewOptions

behavior: 过渡动画

block: 垂直方向的对齐

inline: 水平方向的对齐

15.4 专有拓展

只被某些浏览器采用

15.4.1 children属性

children属性只包含Element类型的子节点,不包含空白文本节点

15.4.2 contains()方法

确定一个元素是不是另一个元素的后代

15.4.3 插入标记

H5把 innerHTML 和 outerHTML 纳入了标准

innerText 和 outerText 没有入选

1.innerText()

读取时会删除所有节点属性,只返回其中的文本节点

使用.innerText()设置时,会先删除所有当前元素的子节点,再把内容设置进去

2.outerText()

读取时,会和innerText()返回相同的内容

写入时,outerText()会替换整个元素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值