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>