问答
1.dom对象的innerText和innerHTML有什么区别?
- innerText返回的是节点内的文本内容,若是多层嵌套,则文本内容是由浅到深的文本拼接
- innerHTML返回的是元素的HTML结构,包含DOm节点和文本内容,在写入的时候也会自动构建DOM
2 . elem.children和elem.childNodes的区别?
- elem.children会返回元素的节点集合,只有元素节点
- elem.childNodes返回的是包含所有类型的节点,不仅仅是元素节点,里面所有内容都包含在内
3 . 查询元素有几种常见的方法?
- document.head;document.body;可直接获取文档的head,body节点
- document.getElementById():返回指定ID属性的元素节点。如果没有发现匹配的节点,则返回null。
- document.getElementsByClassName():返回返回一个类似数组的对象(HTMLCollection类型的对象)。不仅可以在document对象上调用,也可以在任何元素节点上调用。
- document.getElementsByTagName():直接返回所有指定标签的元素,也是类数组对象。
- document.getElementsByName:用于选择拥有name属性的HTML元素,比如form、img、frame、embed和object,返回一个NodeList格式的对象
- querySelector():返回匹配指定的CSS选择器的元素节点。如果有多个节点满足匹配条件,则返回第一个匹配的节点。
- querySelectorAll():返回匹配指定的CSS选择器的所有节点,返回的是NodeList类型的对象
4 . 如何创建一个元素?如何给元素设置属性?
- document.createElement();用于创建一个元素
- setAttribute()方法用于设置元素属性
5 . 元素的添加、删除?
- 添加元素:appendChild()在元素末尾添加元素,insertBefore(newContent, newDiv.firstChild):在某个元素之前插入元素;replaceChild(newElement, oldElement);两个参数,要插入的元素和要替换的元素
- parentNode.removeChild(childNode);删除一个元素
6 . DOM0 事件和DOM2级在事件监听使用方式上有什么区别?
- DOM0级事件:是传统的处理程序方式,将一个函数赋值给一个事件处理程序,特点:一个函数只能直接绑定在元素上,而且只能处理一个事件
- DOM2的事件规定了事件处理有三个阶段,捕获 目标 冒泡 使用监听函数,可以对一个元素增加多个监听器,也可以指定在哪个阶段处理程序
7 。 attachEvent与addEventListener的区别?
- attachEvent和detachEvent是IE早期版本实现事件绑定的方法,后期版本已经支持addEventListener和removeEventListener。他们的主要区别:
- 1.所传参数个数不同
addEventListener可以接受3个参数:1. 要处理的事件名。2. 作为事件处理程序的函数。3. 布尔值(ture代表捕获阶段调用事件处理程序false代表冒泡阶段调用事件处理程序,默认为false)
attachEvent要接受2个参数:1. 要处理的事件名。2. 作为事件处理程序的函数 - 2.第一个参数意义不同
addEventListener第一个参数是事件类型(比如click,load)
attachEvent第一个参数指明的是事件处理函数名称(onclick,onload) - 3.事件处理程序的作用域不相同(这是主要区别)
addEventListener的this就是其所属元素的作用域内运行
attachEvent会在全局作用域中运行,因此this等于window - 4.为一个元素添加多个事件时 执行顺序不同
addEventListener会以添加他们的顺序执行
attachEvent的执行是没有顺序的(添加的方法少的时候大多是按添加顺序的反顺序执行的,但是添加的多了就无规律了)。
8 . 解释IE事件冒泡和DOM2事件传播机制?
- IE事件冒泡:从目标元素身上又一层一层往上传递,最终到html根节点。
- DOM2事件传播机制:
- 捕捉阶段(capturing),事件从顶级文档树节点一级一级向下遍历,直到到达该事件的目标节点。
- 到达事件的目标节点,执行目标节点的时间处理程序。
- 事件冒泡(bubbling),事件从目标节点一级一级向上回溯,直到顶级文档树节点。
9 . 如何阻止事件冒泡? 如何阻止默认事件?
event.preventDefault();取消世间的默认行为。
event.stoppropagation();阻止事件冒泡。