1、dom有5个属性,属性内容如下
下面开始介绍Dom属性,一共有5个属性 1、document object:文档对象 2、element object:标签对象 3、test object:文本对象 4、attribute object:属性对象 5、comment object:注释对象
2、dom导航方法
Dom下面的导航方法
parentElement 父标签
Children 所有的子标签
firstElementChild 第一个子标签
lastElementChild 最后一个子标签
nextElementSibling 下一个兄弟标签
previousElementSibling 上一个兄弟标签
先看个实例
实例如下
<a href="#">百度一下</a>
<div id="div1">
<div>hello div</div>
<p>hello p</p>
</div>
<h1>hello h1</h1>
<script>
var ele = document.getElementById("div1")
alert(ele.lastElementChild.nodeName)
alert(ele.firstElementChild.nodeName)
alert(ele.children)
注意:这里返回的是一个数组,可以通过下面的方法循环打印
var ele_sons = ele.children
for (var i = 0;i <= ele_sons.length;i++){
alert(ele_sons[i])
}
alert(ele.nextElementSibling.nodeName)
alert(ele.previousElementSibling.nodeName)
</script>
3、寻找对象的方式
3_1、全局查找
首先这是全局查找,在整个document中查找
通过id属性查找标签,因为id是全网唯一的,所以返回的结果就是一个标签
var ele = document.getElementById("div1")
通过class属性查找标签
var ele = document.getElementsByClassName("c1"),这里由于class属性不是全网唯一的,所以这里返回的不是一个标签,而是一个数据,计算class的标签
只有一个,他也是一个数组,需要通过索引来取具体的标签
通过标签的名字查找标签
var ele3 = document.getElementsByTagName()
通过标签名称查找的结果和class效果是一样的,都是一个数组
通过name属性的值来查找标签,同样也是返回一个数组,这个用的不多,常用的是上面的三种
var els3 = document.getElementsByName("sb")
3_2、局部查找
下面看下局部查找,就是查找指定标签下的标签
把上面的document替换为指定的ele也是可以的,这个就是局部查找
局部查找支持标签名称
<div class="c1">
<div id="c2">hello div
<p>这是一个子标签的p标签</p>
</div>
<p class="c3" name="sb">hello p</p>
</div>
<script>
var ele = document.getElementById("c2")
var ele2 = ele.getElementsByTagName("p")
在ele2下面查找p标签
alert(ele2[0].innerText)
</script>
局部对象查找不支持id查找
var ele3 = ele.getElementById("c4")
alert(ele3.nodeName)
这个会报错的
Uncaught TypeError: ele.getElementById is not a function
局部查找支持class查找
var ele4 = ele.getElementsByClassName("c5")[0];
alert(ele4.nodeName)
局部查找不支持name属性查找
var ele5 = ele.getElementsByName("c6")[0];
alert(ele5.nodeName)
这个会报错的
Uncaught TypeError: ele.getElementsByName is not a function
4、Dom事件介绍
Dom中的事件,比如我们上面的例子onclick,鼠标点击就会触发onclick事件
onclick事件:鼠标单击会触发事件
ondblclick事件:鼠标双击会触发事件
onfocus事件:元素获得焦点的时候触发的事件,比如一个input输入框,当把鼠标点击输入框,输入就会获得焦点
onblur事件:元素失去焦点的时候触发的事件
下面用input标签写一个例子,默认input标签中有默认值,鼠标点击,默认值去掉,鼠标离开,默认值恢复
<input class="text" type="text" value="默认值" onfocus=func5() onblur=func6()>
javascript的代码
function func5() {
var ret = document.getElementsByClassName("text");
ret[0].value = "";
}
function func6() {
var ret = document.getElementsByClassName("text");
ret[0].value = "默认值";
}
onchange事件:一般用select标签中,如果select选中的标签被更改,则会触发该事件
<select onchange=func8()>
<option>背景</option>
<option>广州</option>
<option>深圳</option>
<option>湖南</option>
<option>内蒙古</option>
</select>
onkeydown事件:按下键盘中的一个键触发的事件,比如我们按回车触发提交
<input type="button" value="键盘触发" onkeydown="func9()">
keycode事件:按下指定的键盘中的某个键触发的事件,用的时候自己查文档吧
onkeydown事件:键盘某个键被按下触发的事件
onkeyup事件:键盘某个键被松开触发的事件
onkeypress事件:键盘某个键被按下然后松开触发的事件
onload事件:一张页面或者一张图加载完成触发的事件
onmousedown事件:鼠标按下触发的事件
onmousemove事件:鼠标在标签的范围内移动就会触发的事件
onmouseout事件:鼠标离开区域,就会触发事件
onmouseover事件:鼠标进入区域,就会触发事件
onsubmit事件:这个事件必须给form标签绑定,submit标签提交数据的时候触发的事件,就比如我们向后台提交数据,前台先做校验,通过则提交,不通过则不让往后台提交,不通过则
return false阻止往后台提交数据
<form action="#" method="post" onsubmit=func1(event)>
姓名:<input id="id1" type="text" name="username">
年龄:<input id="id2" type="text" name="age">
<input type="submit" value="提交">
</form>
javascript代码,有两种方法来实现
function func1(event) {
alert("验证失败")
event.preventDefault()
// 阻止默认的行为
}
第二种方法
<form action="#" method="post" onsubmit="return func2()">
姓名:<input id="id3" type="text" name="username">
年龄:<input id="id4" type="text" name="age">
<input type="submit" value="提交">
</form>
javascript代码
function func2() {
alert("验证失败");
return false;
}
stoppropation事件:一般用在div标签中,阻止事件的延生,比如下面的例子
<div id="div1" onclick="func3()">
<div id="div2" onclick="func4()"></div>
</div>
在这个代码中,点击id为div2的标签会弹出div2和div1,但是如果我们想点击div2的时候只弹出div1,该怎么办呢?
function func3() {
alert("div1")
}
function func4() {
alert("div2")
}
下面这个例子中使用
<div id="div1" onclick="func3()">
<div id="div2" onclick="func4(event)"></div>
</div>
在下面的代码中,点击id为div2的标签不会弹出div1的事件
function func4(event) {
alert("div5")
event.stopPropagation()
}
5、Dom实现增删查标签的效果
5_1、先看下如何增删标签
增
只能通过一个父标签,然后通过这个父标签添加子标签
createElement()创建标签
appendChild()添加标签到指定的父标签的下面
删
只能通过一个父标签,然后通过这个父标签去删除子标签
removeChild():删除指定的子标签
下面的例子使用添加标签和删除标签的作用
<div id="div1">
<div id="div2">hello div2</div>
<p>hello p</p>
</div>
<input type="button" value="添加标签" onclick="func1()">
<input type="button" value="删除标签" onclick="func2()">
<script>
增加标签的函数
function func1() {
var father_ele = document.getElementById("div1");
var son_ele = document.createElement("p");
son_ele.innerText = "被添加的p标签";
son_ele.style.fontSize = "20px";
father_ele.appendChild(son_ele);
}
删除标签的函数
function func2() {
var father_ele = document.getElementById("div1");
var remove_ele = father_ele.lastElementChild;
father_ele.removeChild(remove_ele);
}
</script>
5_2、在来看下如何修改标签
首先修改标签的文本内容
改变文本内容
son_ele.innerHTML = "<a href='www.baidu.com'>百度一下</a>";
这个出来的效果是a标签,可以解析HTML标签
son_ele.innerText = "<a href='www.baidu.com'>百度一下</a>";
这个出来的效果是单纯的字符串,所以innerText只能添加文本,不会解析HTML标签
在来看下如何修改css样式
改变css的样式
我们可以做这样一个例子,鼠标点击事件会把字体的名字变大,或者变小,如果字体大小为10px,则把字体大小修改为30px,如果字体大小为30px,则修改字体大小为10px
<p id="p1" onclick="func3()">测试修改字体属性</p>
function func3() {
var ele = document.getElementById("p1");
if(ele.style.fontSize == "30px"){
ele.style.fontSize = "10px";
}else {
ele.style.fontSize = "30px";
}
}
我们还可以直接修改class属性的值
直接修改class属性
a、首先定义一个css样式
.big{
color: red;
font-size: 30px;
}
b、然后写html代码
<p id="p2" onclick="func4()">测试直接修改class属性</p>
c、然后写javascript代码
function func4() {
var ele = document.getElementById("p2");
alert(ele.classList);
查看ele的class的信息
ele.classList.add("big");
添加class属性
alert(ele.classList)
ele.classList.remove("big")
删除class属性
alert(ele.classList)
}