DOM扩展-js红宝书笔记

1. Selectors API

1.1 querySelector()

querySelector()方法
参数:CSS 选择符参数
返回:匹配该模式的第一个后代元素
如果没有匹配到则返回null

// 取得<body>元素
let body = document.querySelector("body"); 
// 取得 ID 为"myDiv"的元素
let myDiv = document.querySelector("#myDiv");
// 取得类名为"selected"的第一个元素
let selected = document.querySelector(".selected"); 
// 取得类名为"button"的图片
let img = document.body.querySelector("img.button");

1.2 querySelectorAll()

querySelectorAll()方法
和querySelector()差不多,但是返回的是一个NodeList静态实例
注意:它是静态的“快照”,而非“实时”的查询

// 取得 ID 为"myDiv"的<div>元素中的所有<em>元素
let ems = document.getElementById("myDiv").querySelectorAll("em"); 
// 取得所有类名中包含"selected"的元素
let selecteds = document.querySelectorAll(".selected"); 
// 取得所有是<p>元素子元素的<strong>元素
let strongs = document.querySelectorAll("p strong");
let strongElements = document.querySelectorAll("p strong"); 
// 以下 3 个循环的效果一样
for (let strong of strongElements) { 
 strong.className = "important"; 
} 
for (let i = 0; i < strongElements.length; ++i) { 
 strongElements.item(i).className = "important"; 
} 
for (let i = 0; i < strongElements.length; ++i) { 
 strongElements[i].className = "important"; 
}

1.3 matches()

matches()方法
作用:查看某个元素是否在页面中
参数:一个 CSS 选择符
返回:如果元素匹配则该选择符返回 true,否则返回 false

if (document.body.matches("body.page1")){ 
 // true 
}

2. 元素遍历

添加了5个属性,防止注释和文本的干扰

  • childElementCount,返回子元素数量(不包含文本节点和注释);
  • firstElementChild,指向第一个 Element 类型的子元素(Element 版 firstChild);
  • lastElementChild,指向最后一个 Element 类型的子元素(Element 版 lastChild);
  • previousElementSibling ,指向前一个 Element 类型的同胞元素( Element 版previousSibling);
  • nextElementSibling,指向后一个 Element 类型的同胞元素(Element 版 nextSibling)。
    有了这些属性,就不需要再判断nodeType是否等于1了

3. HTML5

3.1 CSS 类扩展

getElementsByClassName()
参数:一个或多个类名
返回一个NodeList类型

// 取得所有类名中包含"username"和"current"元素
// 这两个类名的顺序无关紧要
let allCurrentUsernames = document.getElementsByClassName("username current"); 
// 取得 ID 为"myDiv"的元素子树中所有包含"selected"类的元素
let selected = document.getElementById("myDiv").getElementsByClassName("selected");

3.2 classList 属性

对于拥有多个class的元素,为了避免一个个拆分clss,可以使用classList 属性,是一个新的集合类型 DOMTokenList 的实例。
DOMTokenList实例增加的方法

  • add(value),向类名列表中添加指定的字符串值 value。如果这个值已经存在,则什么也不做。
  • contains(value),返回布尔值,表示给定的 value 是否存在。
  • remove(value),从类名列表中删除指定的字符串值 value。  toggle(value),如果类名列表中已经存在指定的 value,则删除;如果不存在,则添加。

删除某个类名:

div.classList.remove("user");
// 删除"disabled"类
div.classList.remove("disabled"); 
// 添加"current"类
div.classList.add("current");
// 切换"user"类
div.classList.toggle("user"); 
// 检测类名 
if (div.classList.contains("bd") && !div.classList.contains("disabled")){ 
 // 执行操作
) 
// 迭代类名
for (let class of div.classList){ 
 doStuff(class); 
}

3.2 焦点管理

document.activeElement
返回:当前拥有焦点的元素

document.hasFocus()方法
作用:判断文档是否拥有焦点

focus()方法
作用:让某个元素自动获得焦点

let button = document.getElementById("myButton"); 
button.focus(); 
console.log(document.activeElement === button); // true

3.3 HTMLDocument 扩展

3.3.1 readyState 属性

document.readyState 属性

  • loading,表示文档正在加载;
  • complete,表示文档加载完成。
if (document.readyState == "complete"){ 
 // 执行操作
}

3.3.2 compatMode 属性

这个属性唯一的任务是指示浏览器当前处于什么渲染模式
标准模式下 document.compatMode 的值是"CSS1Compat",
而在混杂模式下,document.compatMode 的值是"BackCompat":

if (document.compatMode == "CSS1Compat"){ 
 console.log("Standards mode"); 
} else { 
 console.log("Quirks mode"); 
}

3.3.3 head 属性

作为对 document.body(指向文档的<body>元素)的补充,HTML5 增加了 document.head 属性,指向文档的<head>元素

3.4 字符集属性

characterSet 属性表示文档实际使用的字符集,也可以用来指定新字符集。

console.log(document.characterSet); // "UTF-16" 
document.characterSet = "UTF-8";

3.5 自定义数据属性

使用前缀 data-以便告诉浏览器,这些属性既不包含与渲染有关的信息

// 本例中使用的方法仅用于示范
let div = document.getElementById("myDiv"); 
// 取得自定义数据属性的值
let appId = div.dataset.appId; 
let myName = div.dataset.myname; 
// 设置自定义数据属性的值
div.dataset.appId = 23456; 
div.dataset.myname = "Michael"; 
// 有"myname"吗?
if (div.dataset.myname){ 
 console.log(`Hello, ${div.dataset.myname}`);

3.6 插入标记

3.6.1 innerHTML 属性

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

<div id="content"> 
<p>This is a <strong>paragraph</strong> with a list following it.</p> 
<ul> 
<li>Item 1</li> 
<li>Item 2</li> 
<li>Item 3</li> 
</ul> 
</div>

对于这里的<div>元素,其 innerHTML 属性会返回以下字符串:

<p>This is a <strong>paragraph</strong> with a list following it.</p> 
<ul> 
 <li>Item 1</li> 
 <li>Item 2</li> 
 <li>Item 3</li> 
</ul>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值