什么是DOM
DOM是Document Object Model的简写,即文档对象模型。
DOM用于XHTML、XML文档的应用程序接口(API)。
DOM提供一种结构化的文档描述方式,从而使HTML内容使用结构化的方式显示。
DOM由系列对象组成,是访问、检索、修改XHTML文档内容与结构的标准方法。
DOM标准是由w3c制定与维护。DOM是跨平台与跨语言的。
DOM的顶层是document对象
DOM节点分类node
<a href="链接地址">我的链接</a>
元素节点 element node <a href="链接地址">我的链接</a>
属性节点 attribute node href="链接地址"
文本节点 text node 链接地址 我的链接
DOM操作的内容
1、操作元素的属性
2、操作元素的内容
3、操作元素的样式css
4、获得元素节点对象
5、操作元素的节点对象
DOM直接获得元素对象
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
function demo1(){
//*通过ID名称获得节点元素对象----单个对象
var span =window.document.getElementById("span_1");
alert(span);
}
function demo2(){
//*通过标签的名称获得元素对象----多个对象
var spans=window.document.getElementsByTagName("span");
//获得具体的某一个
alert(spans[1]);
}
function demo3(){
//*通过class的名称获得元素对象----多个对象
var spans=document.getElementsByClassName("sp");
//不是所有的标签都是具有name属性的 所以这种获得方式不是太多
//通过name属性获得元素对象----多个对象
var inp=document.getElementsByName("inp");
alert(spans);
}
</script>
</head>
<body>
<input type="button" name="inp" id="" value="ID获得元素对象" onclick="demo1()" />
<input type="button" name="inp" id="" value="TagName获得元素对象" onclick="demo2()" />
<input type="button" name="" id="" value="Class获得元素对象" onclick="demo3()" />
<hr/>
<span id="span_1">bjsxt</span>
<span>bjsxt</span>
<span class="sp" >bjsxt</span>
<span class="sp">bjsxt</span>
</body>
</html>
DOM间接获得元素对象
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>DOM间接获得元素对象的方式</title>
<script type="text/javascript">
function demo1(){
//获得div对象
var div=document.getElementById("div1");
//获得div下面的所有子元素--text文本也是一个节点
var ch= div.childNodes;
//alert(ch.length);
//document.getElementsByTagName("span")
//获得div下面的所有的span对象
var sp= div.getElementsByTagName("span");
console.log(sp);
}
function demo2(){
//获得span对象
var span=document.getElementById("sp1");
//获得父节点
var pa= span.parentNode;
//console.log(pa);
alert(pa);
}
function demo3(){
//获得span对象
var sp= document.getElementById("sp1");
//获得span对象的上一个元素
//#text
var pr= sp.previousSibling;
// 上一个span对象
var pr2=sp.previousElementSibling;
//获得下一个元素
// #text
var ne= sp.nextSibling;
//下一个span元素对象
var ne2=sp.nextElementSibling;
console.log(pr2);
}
</script>
</head>
<body>
<input type="button" name="" id="" value="获得子元素" onclick="demo1()" />
<input type="button" name="" id="" value="获得父元素" onclick="demo2()" />
<input type="button" name="" id="" value="获得兄弟元素" onclick="demo3()" />
<hr />
<div id="div1">
<span>bjsxt</span>
<span id="sp1">bjsxt</span>
<span>bjsxt</span>
<span>bjsxt</span>
</div>
<span>bjsxtsxt</span>
</body>
</html>
JavaScript中操作元素
1.DOM操作元素的属性
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
function demo1(){
//获得元素对象
var inp=document.getElementById("zh");
//获得对象的属性 inp.value:获得的是实时输入的值不是默认的值
console.log(inp.type+"---"+inp.name+"---"+inp.value);
//操作元素对象的属性
inp.type="button";
inp.value="测试1";
}
</script>
</head>
<body>
<input type="button" name="" id="" value="操作元素的属性" onclick="demo1()" />
<hr />
<input type="text" name="zh" id="zh" value="123" />
</body>
</html>
2.DOM操作元素内容
获得元素内容
单标签获得值得时候使用value属性
双标签获得时候使用的是innerHTML 或者innerText
双标签的特殊情况(value)
Select textarea
取值的时候使用value属性
赋值的时候使用innerHTML或者innerTest即可
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
function demo1(){
//获得div的对象
var div =document.getElementById("div1");
// 文本和HTML的标签
var inn=div.innerHTML;
console.log(inn);
//输出的是纯文本
var inn2=div.innerText;
console.log(inn2);
//操作内容 可以识别HTML标签的
//div.innerHTML="<b>嘿嘿</b>";
//把内容当作纯文本输出
div.innerText+="<b>嘿嘿</b>";
}
function ch(th){
alert(th.value);
}
function test(){
//获得多行文本的对象
var te=document.getElementById("te");
//取值问题
alert(te.value);
//赋值操作
te.innerHTML="sxt";
}
</script>
</head>
<body>
<input type="button" name="" id="" value="元素内容测试" onclick="test()"/>
<hr />
<div id="div1">
<span>人到中年不由己,保温杯里泡枸杞</span>
</div>
<!-- this:代表当前选择的对象-->
<select onchange="ch(this)">
<option value="1">水果1</option>
<option value="2">水果2</option>
<option value="3">水果3</option>
</select>
<textarea id="te" ></textarea>
</body>
</html>
3.DOM操作元素样式
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
function demo1(){
//获得div元素对象
var div =document.getElementById("div1");
//获得元素的css样式--行内样式才可以获得
var wi= div.style.width;
var he =div.style.height;
//[1]操作元素的css样式 第一种 ---使用于指定css样式比较少的情况
/*div.style.width="300px";
div.style.height="300px";
div.style.backgroundColor="darkgoldenrod";*/
//[2]通过增加class属性的方式操作css---如果这个css样式在多个地方重复使用
div.className="divv";
}
</script>
<style>
/*#div1{
width: 200px;
height: 200px;
border: 2px solid red;
}*/
.divv{
width: 500px;
height: 500px;
background-color: royalblue;
}
</style>
</head>
<body>
<input type="button" name="" id="" value="操作节点的css样式" onclick="demo1()" />
<hr />
<div id="div1" class="divv" style="width: 200px; height: 200px; border: 2px solid red;">
</div></body></html>
4.DOM操作元素节点
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
function insert(){
//创建节点对象
var p=document.createElement("p");
p.innerHTML="照片:"
//创建input标签对象
var inp=document.createElement("input");
//给指定的对象赋予属性
inp.type="file";
var inp2=document.createElement("input");
inp2.type="button";
inp2.value="删除";
//给指定的对象赋予事件
inp2.onclick=function(){
//删除节点对象 移除子节点对象
/*p.removeChild(inp);
p.removeChild(inp2);
document.body.removeChild(p);*/
//直接删除p标签对象
p.remove();
}
//获得body对象
//在现有元素之后追加节点对象
/*document.body.appendChild(p);*/
//获得p标签对象
var p1=document.getElementById("p_1");
//在现有元素对象之前增加新的节点对象
document.body.insertBefore(p,p1);
p.appendChild(inp);
p.appendChild(inp2);
}
</script>
</head>
<body>
<p>
姓名:<input type="" name="" id="" value="" />
</p>
<p>
照片:<input type="file" name="" id="" value="" />
<input type="button" name="" id="" value="添加" onclick="insert()"/>
</p>
<p id="p_1">
<input type="button" name="" id="" value="提交" />
<input type="button" name="" id="" value="清空" />
</p>
</body>
</html>
<!--
操作元素节点对象的方法:
[1]创建节点对象:
var p=document.createElement("p");
[2]如何追加到指定节点对象中
p.appendChild(inp);
document.body.insertBefore(p,p1);
[3]移除子节点:
p.removeChild(inp);
直接移除该节点
p.remove();
-->