JavaScript操作DOM对象

什么是DOM

DOM是Document Object Model的缩写,即文档对象模型,是基于文档编程的一套API接口,1998年,W3C发布了一级的DOM规范,这个规范允许访问和操作HTML页面中的每个单独远古三,如网页的表格、图片、文本、表单元素等。

DOM 定义了访问文档的标准:
“W3C 文档对象模型(DOM)是中立于平台和语言的接口,它允许程序和脚本动态地访问、更新文档的内容、结构和样式。”

W3C DOM 标准被分为 3 个不同的部分:

  1. Core DOM - 所有文档类型的标准模型
  2. XML DOM - XML 文档的标准模型
  3. HTML DOM - HTML 文档的标准模型

小结:HTML DOM 是关于如何获取、更改、添加或删除 HTML 元素的标准。

节点与节点之间的关系

DOM是以树状结构组织的HTML文档,根据DOM概念,我们可以知道,HTML文档中每个标签或元素都是一个节点,在DOM中是这样规定的:

  • 整个文档是一个文档节点
  • 每个HTML标签是一个元素节点
  • 包含在HTML元素中的文本是文本节点
  • 每个HTML属性是一个属性节点
  • 注释属于注释节点

HTML DOM 模型被结构化为对象树:
在这里插入图片描述
使用父(parent)、子(child)和同胞(sibling)等术语来描述这些节点的层次关系,父节点拥有子节点,同级的子节点被称为同胞或兄弟节点,关系如下:

  • 在节点树中,顶部节点被称为根(root),如<html>节点

  • 每个节点都有父节点,除了根(它没有父节点),如<head><body>的父节点都是<html>

  • 一个节点可以拥有任意数量的子节点,如<body>节点的子节点有<a><h1>

  • 同胞节点是拥有相同父节点的节点,如<a><h1>就是兄弟节点,它们的父节点均为<body>节点

常用节点分为四类

  1. 文档节点(document):整个HTML文档 document对象作为window对象的属性存在 的,我们不用获取可以直接使用。
  2. 元素节点(Element):HTML文档中的HTML标签
  3. 属性节点(Attr):元素的属性 表示的是标签中的一个一个的属 性,这里要注意的是属性节点并非是元素节点的子节点,而是元素节点的一部分。
  4. 文本节点(Text):HTML标签中的文本内容

访问节点

  1. 通过 id 找到 HTML 元素 document.getElementById(“dv”)
    它是document对象特有的函数。该方法返回一个有着给定id属性值的元素节点对应的对象。

  2. 通过 name属性找到 HTML 元素document.getElementsByName(“btn”)
    方法可返回带有指定名称的对象的集合

  3. 通过标签名找到 HTML 元素 getElementsByTagName(“input”);
    可返回一个对象数组,每个对象分别对应着文档里有着给定标签的一个元素。
    该方法也只有一个参数,该参数是标签的名字。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			function changeContent(){
				var spn = document.getElementById("sp");
				spn.innerHTML = "SS";
			}
			
			function getHobbies(){
				var hb = document.getElementsByName("hobby");
				for(var i = 0; i<hb.length; i++){
					if(hb[i].checked){
					alert(hb[i].value);
				}
			}	
		}
			
			function getValues(){
				var inputs = document.getElementsByTagName("input");
				for(var i = 0;i<inputs.length;i++){
						document.getElementById("dv").innerHTML += inputs[i].value;
				}
			} 
		</script>
	</head>
	<body>
		<span id="sp">国王</span>
		<input type="button" value="点击换内容" onclick="changeContent()" />
		
		<input type="checkbox" name="hobby" value="paly" />玩游戏
		<input type="checkbox" name="hobby" value="read" />读小说
		<input type="checkbox" name="hobby" value="swim" />去游泳
		<input type="button" name="btn" value="点击 " onclick="getHobbies()"/>
		
		<input type="button" name="btn" value="通过input标签获取值" onclick="getValues()"/>
		<div id="dv"></div>
	</body>
</html>

节点信息

1)nodeName(节点名称)

元素节点 nodeName 是标签名
属性节点 nodeName 是属性名称
文本节点 nodeName 永远都是#text
文档节点 nodeName 永远都是#document

2)nodeValue(节点值)

对于文本节点 nodeValue 显示文本内容
对于属性节点 nodeValue 显示属性值
nodeValue 对于文档节点和元素节点不可用的

3)nodeType(节点类型)
nodeType属性可返回节点的类型,是一个只读属性,如返回的是元素节点、文本节点、注释节点等。

元素 1
属性 2
文本 3
注释 8
文档 9

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>节点信息</title>
</head>
<body>
<ul id="nodeList"><li>nodeName</li><li>nodeValue</li><li>nodeType</li></ul><p></p>
<script>
    var nodes=document.getElementById("nodeList");
    var type1=nodes.firstChild.nodeType;
    var type2=nodes.firstChild.firstChild.nodeType;
    var name1=nodes.firstChild.firstChild.nodeName;
    var str=nodes.firstChild.firstChild.nodeValue;
    var con="type1:"+type1+"<br/>type2:"+type2+"<br/>name1:"+name1+"<br/>str:"+str;
    document.getElementById("nodeList").nextSibling.innerHTML=con;
</script>
</body>
</html>

4)属性(查找节点)

  1. firstChild 第一个儿子
  2. lastChild 最后一个儿子
  3. childNodes 所有子节点(集合)
  4. children 所有子元素的集合(不显示其他节点)
  5. parentNode 父节点
  6. nextSibling 下一个兄弟节点
  7. previousSibling 上一个兄弟节点
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>访问节点</title>
    <style>
    	body,ul,li,div,section,header{margin: 0;padding: 0;}
ul,li{list-style: none;}
body{
    font-family: "微软雅黑";
    font-size: 12px;
    line-height: 28px;
}
#news{
    border: 1px solid #cccccc;
    width: 280px;
    overflow: hidden;
    margin: 5px auto 0 auto;
}
#news header{
    border-bottom: 1px solid #cccccc;
    font-size: 16px;
    line-height: 40px;
    padding-left:15px;
    color: #666666;
    font-weight: bold;
}
#news header a{text-decoration: none; color: #666666; float: right; padding-right: 10px; font-size: 12px;}
#news ul li{padding-left: 10px;}
#news ul li a{color: #686868; text-decoration: none; display: inline-block;}
#news ul li a:hover{color: #b02f4a;}

    </style>
</head>
<body>
<section id="news">
	<header>京东快报<a href="#">更多 ></a></header>
	<ul>
	    <li><a href="#">志玲姐姐:墨镜30030</a></li>
	    <li><a href="#">京东无锡馆正式启动</a></li>
	    <li><a href="#">99元抢平板!品牌配件199-100</a></li>
	    <li><a href="#">节能领跑京东先行</a></li>
	    <li><a href="#">高洁丝实力撩货,领券五折</a></li>
	</ul>
</section>
<script>
    var obj=document.getElementById("news");
    var str=obj.lastChild.firstChild.nextSibling.nextSibling.innerHTML;
    var str=obj.lastChild.lastChild.previousSibling.previousSibling.innerHTML;
    var str=obj.lastElementChild.firstElementChild.innerHTML||obj.lastChild.firstChild.innerHTML;
//   var str =obj.children[1].children[2].innerHTML;
    alert(str);
</script>
</body>
</html>

5)方法操作(添加 修改 删除)

1、创建节点

document.createElement(‘要创建的标签名’)

2、添加节点

添加到最后appendChild
parent.appendChild(son);

添加到某个位置insertBefore
parent.insertBefore(son,position)


<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>选择你喜欢的书</title>
    <style>
        *{font-size: 12px; font-family: "Arial", "微软雅黑"; line-height: 25px;}
        div{padding: 5px; text-align: center;
        }
        div span{display: block;}
    </style>
</head>
<body>
<p>选择你喜欢的书:<input type="radio" name="book" onclick="book()">我和狗狗一起活下来 <input type="radio" name="book" onclick="book()">灰霾来了怎么办</p>
<div></div>
<script>
    function book(){
        var ele=document.getElementsByName("book");
        var bName=document.getElementsByTagName("div")[0];
        if(ele[0].checked){
            var img=document.createElement("img");
            img.setAttribute("src","images/dog.jpg");
            img.setAttribute("alt","我和狗狗一起活下来");
            bName.appendChild(img);
        }
        else if(ele[1].checked){
            var img=document.createElement("img");
            img.setAttribute("src","images/mai.jpg");
            img.setAttribute("alt","灰霾来了怎么办");
            img.setAttribute("onclick","copyNode()")
            bName.appendChild(img);
        }
    }
    function copyNode(){
        var bName=document.getElementsByTagName("div")[0];
        var copy=bName.lastChild.cloneNode(false);
        bName.insertBefore(copy,bName.firstChild);
    }

</script>
</body>
</html>

3、克隆

new = old.cloneNode();

如果我们传递一个参数参数值为true 表示携带子元素一起克隆

4、设置、获取值
getAttribute(“属性名”):用来获取属性的值

setAttribute(“属性名”,“属性值”):用来设置属性的值

5、删除子节点

parent.removeChild(son)

6、删除自己节点

son.parentNode.removeChild(son)

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>删除和替换节点</title>
    <style>
        *{padding: 0; margin: 0; font-size: 12px;}
        ul,li{list-style: none;}
        li{float: left; text-align: center; width: 140px;}
    </style>
</head>
<body>
    <ul>
        <li>
            <img src="images/f01.jpg" id="first">
            <p><input type="button" value="删除我吧" onclick="del()"></p>
        </li>
        <li>
            <img src="images/f02.jpg" id="second">
            <p><input type="button" value="换换我吧" onclick="rep()"></p>
        </li>
    </ul>
<script>
    function del(){
        var delNode=document.getElementById("first");
        delNode.parentNode.removeChild(delNode);
    }
    function rep(){
        var oldNode=document.getElementById("second");
        var newNode=document.createElement("img");
        newNode.setAttribute("src","images/f03.jpg");
        oldNode.parentNode.replaceChild(newNode,oldNode);
    }
</script>
</body>
</html>

常用事件

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值