JSDom、事件

1.dom对象的innerText和innerHTML有什么区别?

Node.innerText返回获取到的目标元素节点内的文本内容,如果目标节点有嵌套,文本内容会自动按层拼接。Node.innerHTML返回获取到的目标元素节点的HTML结构(包括文本内容)。注意:通过Node.innerText="str...."/Node.innerHTML=""方法修改的只是在内存中的Node节点对象的文本内容/HTML,并不能修改实际HTML页面上的内容。Node.innerText方法修改时输入的内容为文本格式,即使有HTML标签也会当成文本。Node.innerHTML方法修改时当有HTML标签时会当成HTML标签处理


 
123

456 789

var str=document.getElementsByTagName("div")[0]; console.log(str.innerText);//返回结果123 456 789 str.innerText="cc kk ee dd"console.log(str.innerText);//返回修改后的innerText内容为"cc kk ee dd",内存中的原内容被替换,实际页面不会被修改 str.innerHTML="";//修改innerHTML内容,内存中的原内容被替换,实际页面不会被修改console.log(str);//返回修改后的innerHTML:

2.elem.children和elem.childNodes的区别?

Node.children:返回子元素列表(返回HTMLCollection),只包括HTML元素不包括文本元素
Node.childNodes:返回子元素列表(返回NodeList),包括所有子元素(文本元素和HTML元素)






dddd
        

aaaa

bbbbb

var chil1 =document.querySelector("div").children; var child2 = document.querySelector("div").childNodes; console.log(chil1); //返回[div.left, div.right] 只有两个html元素构成的类数组对象 console.log(child2);//返回[text, div.left, text, div.right, text]返回包含文本元素构成的类数组对象
3.查询元素有几种常见的方法?

document.getElementById("test") //返回匹配指定id的元素节点,Element单数哦因为id是唯一的
document.getElementsByClassName("red,test") //返回匹配指定类名的元素节点(搜索范围包括本身),返回的是类数组对象,不仅可以在document对象上调用,也可以在任何元素节点上调用。参数可为多个哦
document.getElementsByTagName("p");//返回所有指定标签的元素(搜索范围包括本身)
getElementsByName("kkk") //返回匹配元素有name属性,且name属性名为kkk的元素
querySelector(".classname/#id") //ES5新方法,如果有多个节点满足匹配条件,则返回第一个匹配的节点。
querySelectorAll() //返回匹配指定的CSS选择器的所有节点,返回结果不是动态集合,不会实时反映元素节点的变化。






        dddd
        

aaaa

bbbbb


4.如何创建一个元素?如何给元素设置属性?

创建元素:
document.createElement("标签名称tagName") //document对象中创建HTML元素节点
document.createTextNode("文本节点内容") //创建文本节点
Node.cloneNode(true/false)//克隆节点,true深复制,false只复制自身节点

JSDom、事件_第1张图片
Paste_Image.png

创建元素返回结果:

Paste_Image.png

设置元素属性:
Node.setAttribute("class/id","name")

JSDom、事件_第2张图片
Paste_Image.png

设置属性后返回结果:

Paste_Image.png

5.元素的添加、删除?

Node.appendChild() //在元素末尾添加,如果参数节点是DOM中已经存在的节点,appendChild方法会将其从原来的位置,移动到新位置。
Node.insertBefore()//将目标节点插入当前节点的指定位置,有两个参数,第一个参数是所要插入的节点,第二个参数是当前节点的一个子节点,新的节点将插在这个节点的前面。
Node.removeChild() //父元素上删除其子元素,从当前节点移除该子节点。
1.增加元素node.appendChild(newnode//将新增的元素newnode插入到父元素node中的最后位置

JSDom、事件_第3张图片
Paste_Image.png
var newnod1=document.createElement("a");
var nod1=document.getElementById('content');
newnod1.setAttribute("class","wrap ccc");
nod1.appendChild(newnod1);

增加元素appendChild()返回结果

JSDom、事件_第4张图片
Paste_Image.png

2.增加元素node.inserBefore(newnode,node.fristChild)//将新增的元素newnode插入到父元素node下的指定位置

JSDom、事件_第5张图片
Paste_Image.png
var newnod1=document.createElement("a");
var nod1=document.getElementById('content');
newnod1.setAttribute("class","wrap ccc");
nod1.insertBefore(newnod1,nod1.lastChild);
console.log(nod1);

增加元素insertBefore()返回结果:

JSDom、事件_第6张图片
Paste_Image.png

3.删除元素node.parentNode.removeChild(node)//删除元素自身,参考父元素的位置

JSDom、事件_第7张图片
Paste_Image.png
var nod1=document.getElementsByClassName("right");//nod1是类数组对象 ,要删除的目标元素
nod1[0].parentNode.removeChild(nod1[0]);//删除类数组对象中的第一个 。删除目标元素的父元下的某子元素,参考父元素位置
var nod2=document.getElementById("content");
console.log(nod2);
删除元素返回结果:类名=right的元素被删除了
JSDom、事件_第8张图片
Paste_Image.png

6.DOM0 事件和DOM2级在事件监听使用方式上有什么区别?

DOM0 事件方法指定的事件处理程序是元素的方法,事件处理程序是在元素的作用域中运行,即程序中的this引用当前元素。如果要删除DOM0 级事件处理程序,只要将事件处理程序设置为null即可。
DOM2 定义的事件方法有两种addEventListener()和removeEventListener(),接受三个参数:1.事件名称 2.事件处理函数 3.布尔值,调用事件处理函数的方式(true在事件捕获阶段调用,false在事件冒泡阶段处理),所有DOM节点都支持这两种方法。通过addEventListener()添加的事件只能通过removeEventListener()来删除,删除时传入的参数与添加时相同,这也就意味着添加的匿名函数是无法删除的。
DOM0和DOM2的区别:1.DOM2级的事件可绑定多个事件处理函数。2.DOM0级事件只能在冒泡阶段响应,无法选择其他方式,而DOM2级可以选择。




    



    点击1
        
                点击2
        
        
                

点击3

点击1/点击2运行结果

Paste_Image.png

7.attachEvent与addEventListener的区别?

【1】接受的参数:
attachEvent接受2个参数:事件名称,事件处理函数,只支持事件冒泡。
addEventListener接受3个参数:事件名称,事件处理函数,布尔值(选择是事件冒泡时执行,还是事件获取时执行)
【2】事件名称:
attachEvent事件名称前面要加“on”,如“onclick”,
addEventListener不需要,如“click”。
【3】作用域:
attachEvent会在全局作用域中运行,即this = window。
addEventListener是在元素作用域中运行,this指的是当前元素。
【4】事件处理程序的顺序:
addEventListener是按照添加顺序执行。
attachEvent是按照添加顺序相反执行。
【5】删除方法:
attachEvent使用detachEvent删除添加事件。
addEventListener使用removeEventListener删除添加事件。
【6】兼容:
IE8以及IE8以下只支持attachEvent,
IE9开始支持addEventListener。


8.解释IE事件冒泡和DOM2事件传播机制?

DOM2事件传播机制:当一个事件发生以后,它会在不同的DOM节点之间传播(propagation)。这种传播分成三个阶段:
第一阶段:从window对象传导到目标节点,称为“捕获阶段”(capture phase)。第二阶段:在目标节点上触发,称为“目标阶段”(target phase)。第三阶段:从目标节点传导回window对象,称为“冒泡阶段”(bubbling phase)。这种三阶段的传播模型,会使得一个事件在多个节点上触发。事件传播的最上层对象是window,接着依次是document,html(document.documentElement)和body(document.dody)。也就是说,如果body元素中有一个div元素,点击该元素。事件的传播顺序,在捕获阶段依次为window、document、html、body、div(由外层向内层找,由不具体到具体),在冒泡阶段依次为div、body、html、document、window(由内层向外层,有具体到不具体)。

Click Me

如果对这两个节点的click事件都设定监听函数,则click事件会被触发四次。
捕获阶段:事件从div向p传播时,触发div的click事件;
目标阶段:事件从div到达p时,触发p的click事件;
目标阶段:事件离开p时,触发p的click事件;
冒泡阶段:事件从p传回div时,再次触发div的click事件。

IE事件冒泡:指的是IE的事件流,事件开始时由最具体的元素(文档嵌套层次最深的那个节点)接受,然后逐渐向上传播到较为不具体的节点(文档)
DOM2的事件传播机制:指的是DOM2级事件的事件流,包括三个阶段:事件捕获阶段、处于目标阶段和事件冒泡阶段。首先发生的是事件捕获,为截获事件提供了机会。然后是实际的目标收到事件。最后一个是冒泡阶段,事件作出相应。


9.如何阻止事件冒泡? 如何阻止默认事件?

阻止事件冒泡:
stopPropagation()方法阻止事件在DOM中继续传播,防止再触发定义在别的节点上的监听函数,但是不包括在当前节点上新定义的事件监听函数。




    



    点击1
        
                点击2
        
    




点击2时执行结果:

Paste_Image.png

点击2事件监听函数中增加mousev.stopPropagation()后,事件不会冒泡,执行结果为

Paste_Image.png

阻止默认事件:
preventDefault()方法取消浏览器对当前事件的默认行为,比如点击链接后,浏览器跳转到指定页面,或者按一下空格键,页面向下滚动一段距离。该方法生效的前提是,事件的cancelable属性为true,如果为false,则调用该方法没有任何效果。该方法不会阻止事件的进一步传播(stopPropagation方法可用于这个目的)。只要在事件的传播过程中(捕获阶段、目标阶段、冒泡阶段皆可),使用了preventDefault方法,该事件的默认方法就不会执行。




    



    点击1
        
                点击2
        
        
                

点击3

点击1执行效果:更改link1的href值,并跳转到目标网址bing
点击2执行效果(不跳转到目标网址):

Paste_Image.png

10.有如下代码,要求当点击每一个元素li时控制台展示该元素的文本内容。不考虑兼容


代码如下:





  


  

预览地址


11.补全代码,要求:

1.当点击按钮开头添加时在

  • 这里是
  • 元素前添加一个新元素,内容为用户输入的非空字符串;当点击结尾添加时在
  • 前端6班
  • 后添加用户输入的非空字符串.
    2.当点击每一个元素li时控制台展示该元素的文本内容。

    
    
    
    
        
    
    
        
        
        
        
        
    
    
    

    预览地址


    12.补全代码,要求:当鼠标放置在li元素上,会在img-preview里展示当前li元素的data-img对应的图片。
    
    

    代码如下:

    
    
    
    
    
    
    
    

    预览地址(for循环)
    用事件代理

    
    
    
    
        
    
    
        
        

    预览地址(事件代理)


    13.实现如下图Tab切换的功能
    JSDom、事件_第9张图片
    Paste_Image.png

    代码如下:

    
    
    
        
        
    
    
        
    • tab1
    • tab2
    • tab3
    内容1
    内容2
    内容3

    预览地址


    14.实现下图的模态框功能

    JSDom、事件_第10张图片
    Paste_Image.png

    代码如下:

    
    
    
    
        
        任务5-2
        
    
    
    
    

    我是标题

    X

    内容1

    内容2

    预览地址

    你可能感兴趣的:(JSDom、事件)