DOM(document object model)对象把 HTML 文档呈现为带有元素、属性和文本的树结构(节点树),定义了访问和操作HTML文档的标准方法。
一、查找标签
1、直接查找标签
总共有如下四种直接查找的方式:
document.getElementById(“idname”) //通过id名 document.getElementsByTagName(“tagname”) //通过标签名 document.getElementsByName(“name”) //通过name名 document.getElementsByClassName(“name”) //通过class名
上述四种查找中,因为id的唯一性,得到结果就是对应标签对象。但是对于其他三种方式,因为其不唯一性,得到是包含满足条件的对象数组,通过数组索引可以取到相应的element对象,注意即使结果就一个对象,它也是一个对象数据。
<body> <div id="div1"> <div class="div2">i am div2</div> <div name="yuan">i am div2</div> <div id="div3">i am div2</div> <p>hello p</p> </div> <script> /*通过document对象可以查找任何级别的对象*/ var div1=document.getElementById("div1");
/*通过查找到的element对象(必须是id对象)查找其子级标签时,不支持通过id和name查找*/ //支持; var ele= div1.getElementsByTagName("p"); alert(ele.length); //支持 var ele2=div1.getElementsByClassName("div2"); alert(ele2.length); //不支持 var ele3=div1.getElementById("div3"); alert(ele3.length); //支持 var ele3_=document.getElementById("div3"); console.log(ele3_) //不支持 var ele4=div1.getElementsByName("yuan"); alert(ele4.length) //支持 var ele4_=document.getElementsByName("yuan") alert(ele4_.length) </script> </body> </html>
2、导航查找
导航查找即是通过通过某个标签定位其他标签,主要属性如下:
'''
parentElement // 父节点标签元素
children // 所有子标签
firstElementChild // 第一个子标签元素
lastElementChild // 最后一个子标签元素
nexElementtSibling // 下一个兄弟标签元素
previousElementSibling // 上一个兄弟标签元素
'''
实例如下:
<script> var ele1=document.getElementById("div1"); var child=ele1.children; alert(child.length) ; //结果为4,得到是一个对象数组 var first=ele1.firstElementChild; console.log(first); //得到第一个孩子对象:<div class="div2">i am div2</div> var last=ele1.lastElementChild; console.log(last); //得到最后一个孩子对象: <p>hello p</p> var ele2=document.getElementById("div3"); var parent=ele2.parentElement; console.log(parent); //获得父级对象 var next=ele2.nextElementSibling; console.log(next); //得到下一个紧挨的兄弟对象:<p>hello p</p> var privous=ele2.previousElementSibling; console.log(privous); //得到上一个紧挨的兄弟对象:<div name="yuan">i am div2</div> </script>
二、标签操作
1、文本操作
取值操作:
innerText主要取得元素内的纯文本内容,而innerHTML则取得元素内包含所有的东西,包含文本和子元素,实例如下:
<body> <div class="c1"> <span>hello</span> </div> <script> var ele=document.getElementsByClassName("c1")[0]; console.log(ele.innerText); //输出结果为:hello console.log(ele.innerHTML); //输出结果为:<span>hello</span> </script> </body>
赋值操作:
如下两种赋值,均是首先对标签内的所有的内容(包含子标签)进行清空,然后将进行赋值,不同的是innerText赋值的内容中即使有标签的内容,标签也会当做文本显示,即不识别标签,而innerHTML会识别标签,只显示文本内容,实例如下:
<body> <div class="c1"> <span>hello</span> </div> <script> var ele=document.getElementsByClassName("c1")[0]; ele.innerText="<a href="">hello</a>"; //屏幕显示:“<a href="">hello</a>” ele.innerHTML="<a href="">hello</a>"; //屏幕显示:“hello”,<a>还是标签 </script> </body>
2、属性操作
包括属性的设置和获取,实例如下:
<body> <div class="c1 c2" id="d1">egon</div> <script> var ele=document.getElementsByClassName("c1")[0]; // 原生JS支持: console.log(ele.getAttribute("class")); //获得class属性名:c1 c2 ele.setAttribute("egon","周末"); //设置属性:egon=周末 // DHTML语法: console.log(ele.id); //获得id属性名:d1 ele.id="d2"; //设置属性:id=d2 </script> </body>
3、class操作
包含获取class属性的名字、增加class名字和移除class名字,结合css,可以控制布局效果,应用实例如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .c1{ color: red; } .c2{ background-color: green; } .c3{ line-height: 60px; } </style> </head> <body> <div class="c1 c2">egon</div> <script> var ele=document.getElementsByClassName("c1")[0]; console.log(ele.className); // "c1 c2" ele.classList.add("c3"); //将c3加入到class属性下,实现c3的css效果 ele.classList.remove("c2"); //将c2从class属性下移除,去除c2的css效果 </script> </body> </html>
4、改变css
通过:element.style.css属性=“属性值”,语法设置改变css,实例如下:
<body> <p id="d1">hello</p> <button>change</button> <script> var ele_button=document.getElementsByTagName("button")[0]; var ele_p=document.getElementById("d1"); /* 给button按钮绑定一个事件,点击后,设置css中的color和fonsize属性*/ ele_button.onclick=function () { ele_p.style.color="red"; ele_p.style.fontSize="24px" } </script> </body>
5、获取选中value值
应用实例如下:
<body> <form action=""> <input type="text" id="user" value="123"> <select name="pro" id="s1"> <option value="1">111</option> <option value="2">222</option> <option value="3">333</option> </select> </form> <script> var ele_user=document.getElementById("user"); console.log(ele_user.value);//123 ele_user.value="hello"; //更改value值 var ele_s1=document.getElementById("s1"); console.log(ele_s1.value) //当前选中对应的value值 </script> </body>
三、绑定事件
1、事件类型
onclick 当用户点击某个对象时调用的事件句柄。
ondblclick 当用户双击某个对象时调用的事件句柄。
onfocus 元素获得焦点。 练习:输入框
onblur 元素失去焦点。 应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
onchange 域的内容被改变。 应用场景:通常用于表单元素,当元素内容被改变时触发.(三级联动)
onkeydown 某个键盘按键被按下。 应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
onkeypress 某个键盘按键被按下并松开。
onkeyup 某个键盘按键被松开。
onload 一张页面或一幅图像完成加载。
onmousedown 鼠标按钮被按下。
onmousemove 鼠标被移动。
onmouseout 鼠标从某元素移开。
onmouseover 鼠标移到某元素之上。
onmouseleave 鼠标从元素离开
onselect 文本被选中。
onsubmit 确认按钮被点击。
2、绑定事件
方式一:在标签内设置事件类型,让其调用相应的函数。将如下左侧菜单应用实例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> *{ margin: 0; padding: 0; } .left{ float: left; 20%; height: 800px; background-color: #c0cddf; } .right{ float: left; 80%; height: 800px; background-color: #9add7f; } .item{ padding: 10px; } .title{ padding: 10px; color: white; background-color: #2459a2; text-align: center; } .con{ padding: 5px; } .hide{ display: none; } </style> </head> <body> <div class="left"> <div class="item"> <div class="title" onclick=fool(this)>菜单一</div> <div class="con"> <p>111</p> <p>111</p> <p>111</p> </div> </div> <div class="item"> <div class="title" onclick=fool(this)>菜单二</div> <div class="con hide"> <p>222</p> <p>222</p> <p>222</p> </div> </div> <div class="item"> <div class="title" onclick=fool(this)>菜单三</div> <div class="con hide"> <p>333</p> <p>333</p> <p>333</p> </div> </div> </div> <div class="right"></div> <script> function fool(self) { self.nextElementSibling.classList.remove("hide"); var ele_title=document.getElementsByClassName("title"); for (var i=0;i<ele_title.length;i++){ if(ele_title[i]!=self){ ele_title[i].nextElementSibling.classList.add("hide"); } } } </script> </body> </html>
方式二:通过如下形式:“标签对象.事件类型=function(){}”,绑定事件,触动事件时执行function函数,应用实例如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <ul> <li class="item">111</li> <li class="item">222</li> <li class="item">333</li> </ul> <script> var ele=document.getElementsByClassName("item"); for (var i=0;i<ele.length;i++){ ele[i].onclick=function() { alert(this.innerText) //this不可以使用ele[i]代替,for循环只是完成了事件的绑定,并未触动事件,当抽动事件的时候i=3 } } </script> </body> </html>