DOM
2017-10-07 本文已影响0人
曾祥辉
题目1: dom对象的innerText和innerHTML有什么区别?
- innerText:返回元素内包含的文本内容,在多层次的时候会按照元素由浅到深的顺序拼接,其内容可写;
- innerHTML:返回元素的HTML结构,在写入的时候也会自动构建DOM。
题目2: elem.children和elem.childNodes的区别?
首先了解Element和Node的区别:
Node(节点)是DOM层次结构中的任何类型的对象的通用名称,Node有很多类型;如元素节点,属性节点,文本节点,注释节点等,通过NodeType区分;
Element继承了Node类,也就是说Element是Node多种类型中的一种,另外Element扩展了Node,Element拥有id、class、children等属性。
而children是Element的属性,childNodes是Node的属性
题目3:查询元素有几种常见的方法?ES5的元素选择方法是什么?
-
查询元素常见的方法
-
getElementById()
-
getElementsByClassName()
-
getElementsByTagName()
-
getElementsByName()
-
ES5的元素选择方法
-
querySelector()
-
querySelectorAll()
-
elementFromPoint()
题目4:如何创建一个元素?如何给元素设置属性?如何删除属性
- 创建一个元素:
var newDiv = document.createElement("div");
- 给元素设置属性
var node = document.getElementById("div1");
node.setAttribute("my_attrib", "newVal");
- 删除属性
node.removeAttribute('attrName');
(attrName 是一个字符串,将要从元素中删除的属性名。)
题目5:如何给页面元素添加子元素?如何删除页面元素下的子元素?
- 给页面元素添加子元素
//创建一个新的段落p元素,然后添加到body(父元素)的最尾部
var p = document.createElement("p");
document.body.appendChild(p);
//在当前节点的某个子节点之前再插入一个子节点
<div id="parentElement">
<span id="childElement">foo bar</span>
</div>
<script>
// 创建一个新的span元素
var sp1 = document.createElement("span");
// 获取需要插入子节点的元素
var sp2 = document.getElementById("childElement");
// 获取父元素
var parentDiv = sp2.parentNode;
// 在sp2之前将新元素插入到DOM中
parentDiv.insertBefore(sp1, sp2);
</script>
- 删除页面元素下的子元素
<div id="top" align="center">
<div id="nested"></div>
</div>
// 先定位父节点,然后删除其子节点
var d = document.getElementById("top");
var d_nested = document.getElementById("nested");
var throwawayNode = d.removeChild(d_nested);
// 无须定位父节点,通过parentNode属性直接删除自身
var node = document.getElementById("nested");
if (node.parentNode) {
node.parentNode.removeChild(node);
}
// 移除一个元素节点的所有子节点
var element = document.getElementById("top");
while (element.firstChild) {
element.removeChild(element.firstChild);
}
题目6: element.classList有哪些方法?如何判断一个元素的 class 列表中是包含某个 class?如何添加一个class?如何删除一个class?
element.classList方法如下:
add( String [, String] )
添加指定的类值。如果这些类已经存在于元素的属性中,那么它们将被忽略。
remove( String [,String] )
删除指定的类值。
item ( Number )
按集合中的索引返回类值。
toggle ( String [, force] )
当只有一个参数时:切换 class value; 即如果类存在,则删除它并返回false,如果不存在,则添加它并返回true。
当存在第二个参数时:如果第二个参数的计算结果为true,则添加指定的类值,如果计算结果为false,则删除它
contains( String )
检查元素的类属性中是否存在指定的类值。
var node = document.querySelector('ct')
//判断一个class为ct的元素的class 列表中是包含logo(某个 class)
node.classlits.contains('logo')//true or false
//添加一个名为logo的class
node.classlits.add('logo')
//删除一个名为logo的class
node.classlits.remove('logo')
题目7: 如何选中如下代码所有的li元素? 如何选中btn元素?
<div class="mod-tabs">
<ul>
<li>list1</li>
<li>list2</li>
<li>list3</li>
</ul>
<button class="btn">点我</button>
</div>
//选中如下代码所有的li元素
var li = document.querySelectorAll('li')
//选中btn元素
var btn document.querySelector('.btn')