Open zilongxuan001 opened 6 years ago
在HTML DOM中,所有事物都是节点。
一篇文档是一个文档节点
HTML元素是元素节点
HTML元素内的文本是文本节点
HTML属性是属性节点
注释是注释节点
<!--追溯网站-->
<h1 class="header-color">追溯实现全面覆盖</h1>
<!--追溯网站-->
就是注释节点
<h1></h1>
是元素节点
追溯实现全面覆盖
是文本节点
class="header-color"
是属性节点
HTML DOM将 HTML文档视为树结构,这种结构被称为节点树。
节点之间有根(root)、父(parent)、子(child)和同胞(sibling,相同父节点)等关系。
所有节点都可以被JavaScript增删改查。
<html>
<head>
<title>文档标题</title>
</head>
<body>
<a href="">我的链接</a>
<h1>我的标题</h1>
</body>
</html>
树状图如下
节点关系如下
方法就是你可以干啥,比如增删改元素、文本、属性,方法带括号。类似,人的方法有eat(),sleep(),work(),play()等等。
属性你就是什么样,属性不带括号。比如HTML节点值。类似,人的属性有姓名、身高、体重、年龄、性别等。
方法.getElementById()
可以返回带有制定ID的元素
属性.innerHTML
可以获得元素的文本值。
代码
<html>
<body>
<h4 id="head">Waaa!<h4>
<p id="intro">Hello World!</p>
<script>
y=document.getElementById("head");
document.write("<h2>来自head段落的文本"+y.innerHTML+"</h2>")
x=document.getElementById("intro");
document.write("<h1>来自 intro 段落的文本:" + x.innerHTML + "</h1>");
</script>
</body>
</html>
结果显示
查找元素
改变子节点
创建节点
属性
getElementById(id)
返回带有指定 ID 的元素。
语法node.getElementById("id");
getElementsByTagName()
返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)
语法 node.getElementsByTagName("tagname");
getElementsByClassName()
返回包含带有指定类名的所有元素的节点列表。
语法document.getElementsByClassName("intro");
getElementsByClassName()
在 Internet Explorer 5,6,7,8 中无效。
代码
<html>
<body>
<h1 class="target">追溯宣传</h1>
<h1>追溯我当先</h1>
<p id="intro" class="target">追溯千万里</p>
<div id="main">
<p>肉类追溯</p>
<p>菜类追溯</p>
</div>
<script>
<!--通过ID获得-->
x=document.getElementById("intro");
document.write("<p>使用ID获得来自 intro 段落的文本:" + x.innerHTML + "</p>");
<!--通过Tag获得-->
y=document.getElementsByTagName("h1");
document.write("使用Tag获得 " + y[0].innerHTML);
<!--索引从0开始,0是从HTML文档上到下排序的第一个元素->
<!--获得id为main,子元素为p的所有节点>
z=document.getElementById("main").getElementsByTagName("p");
document.write("<br><br>"+z[0].innerHTML);
<!--通过Class获得元素>
q=document.getElementsByClassName("target");
document.write("<br>"+"<p>通过Class获得元素</p>"+q[0].innerHTML+","+q[1].innerHTML);
</script>
</body>
</html>
appendChild()
把新的子节点添加到指定节点
removeChild()
删除子节点
代码
<html>
<body style="background-color:rgb(134,158,0)">
<div id="div1">
<h1 id="head">熊妈</h1>
<p id="p1">我是熊大。</p>
<p id="p2">我是熊二。熊妈和熊大去哪儿了?</p>
</div>
<script>
<!--选择元素-->
var parent=document.getElementById("div1");
var child=document.getElementById("p1");
<!--删除元素-->
parent.removeChild(child);
<!--选择元素-->
var maMa=document.getElementById("div1");
var child1=document.getElementById("head");
<!--删除元素-->
maMa.removeChild(child1);
</script>
</body>
</html>
结果
必须要知道删除的元素的父元素,才能删除该元素。常用方法:找到您需要删除的子元素,然后使用 parentNode 属性来查找其父元素。
举例 代码
<html>
<body style="background-color:rgb(134,158,0)">
<div id="div1">
<h1 id="head">熊妈</h1>
<p id="p1">我是熊大。</p>
<p id="p2">我是熊二。熊妈和熊大去哪儿了?</p>
</div>
<script>
<!--选择元素-->
var child=document.getElementById("p1");
<!--删除元素-->
child.parentNode.removeChild(child);
<!--选择元素-->
var child1=document.getElementById("head");
<!--删除元素-->
child1.parentNode.removeChild(child1);
</script>
</body>
</html>
结果
replaceChild()
替换子节点
代码
<html>
<body style="background-color:rgb(185,125,100)">
<div id="div1">
<p id="p1">我是大娃。</p>
<p id="p2">我是二娃。</p>
</div>
<script>
<!--选择元素-->
var parent=document.getElementById("div1");
var child=document.getElementById("p1");
<!--创建元素-->
var para=document.createElement("p");
<!--创建文本-->
var node=document.createTextNode("我换了大哥.");
<!--添加节点-->
para.appendChild(node);
<!--替换节点-->
parent.replaceChild(para,child);
</script>
</body>
</html>
结果
insertBefore()
在指定的子节点前面插入新的子节点
也是创建节点的一种方式。
代码
<html>
<body style="background-color:yellow">
<div id="div1">
<p id="p1">追溯,我们一直在路上</p>
<p id="p2">追溯,永不停止</p>
</div>
<script>
<!--创建新节点和文字->
var para=document.createElement("h1");
var node=document.createTextNode("我是新来的逗比.");
para.appendChild(node);
<!--插到子节点的前面-->
var element=document.getElementById("div1");
var child=document.getElementById("p1");
element.insertBefore(para,child);
</script>
</body>
</html>
结果
createAttribute()
创建属性节点
createElement()
创建元素节点
createTextNode()
创建文本节点
先创建节点,再添加到HTML已有节点上。
代码
<html>
<body style="background-color:rgb(186,242,124)" id="head">
<div id="div1">
<p id="p1">追溯千万里</p>
<p id="p2">你我齐努力</p>
</div>
<script>
<!--创建元素节点和文本节点-->
var para=document.createElement("p");
var node=document.createTextNode("新看点");
para.appendChild(node);
<!--添加到id为div1的元素的子节点上-->
var element=document.getElementById("div1");
element.appendChild(para);
</script>
</body>
</html>
结果
getAttribute()
返回指定的属性值
setAttribute()
把指定属性设置或修改为指定的值
innerHTML
改变节点(元素)的文本值
代码
<html>
<body style="background-color:rgb(186,242,124)">
<p id="p1">Hello World!</p>
<script>
document.getElementById("p1").innerHTML="肉菜追溯,你我同行!";
</script>
<p>原文本:Hello World!</p>
</body>
</html>
结果
childNodes
nodeValue
childNodes 和 nodeValue 属性也可用来获取元素的内容。 代码
<html>
<body style="background-color:rgb(225,125,120)">
<p id="intro">问君能有几多愁</p>
<br>
<script>
txt=document.getElementById("intro").childNodes[0].nodeValue;
document.write("<p>"+txt+",恰似一江春水向东流</p>");
</script>
</body>
</html>
结果
.style.color
.style.fontFamily
.style.fontSize
代码
<html>
<body style="background-color:rgb(186,242,124)">
<h3 class="head" id="good">追溯你看行</h3>
<h3 class="head">肉菜放心篮</h3>
<p id="p1">Hello world!</p>
<p id="p2">Hello world!</p>
<script>
document.getElementById("p2").style.color="blue";
document.getElementById("p2").style.fontFamily="Arial";
document.getElementById("p2").style.fontSize="larger";
document.getElementsByClassName("head")[0].style.color="rgb(255,0,0)";
document.getElementsByTagName("h3")[1].style.color="rgb(0,0,255)";
document.getElementById("good").style.fontSize="32px";
document.getElementById("good").style.fontFamily="Arial";
</script>
</body>
</html>
结果
.nodeName
属性规定节点的名称
nodeValue 属性规定节点的值。
nodeType 属性返回节点的类型。nodeType 是只读的。
元素 的NodeType是1 属性的NodeType是2 文本 的NodeType是3 注释 的NodeType是8 文档 的NodeType是9
<html>
<body>
<h1 id="head">肉菜追溯</h1>
<p id="intro">保卫市民菜篮子</p>
<script>
x=document.getElementById("intro");
document.write(x.firstChild.nodeValue);
document.write(x.firstChild.nodeName);
document.write(x.firstChild.nodeType);
y=document.getElementById("head");
document.write(y.firstChild.nodeValue);
document.write(y.firstChild.nodeType);
</script>
</body>
</html>
document.write(x.firstChild.nodeValue);
返回了文本值 保卫市民菜篮子
;
document.write(x.firstChild.nodeName);
返回了文本名称“#text”;
document.write(x.firstChild.nodeType);
返回了文本类型,为3,即文本。
HTML DOM 允许您在事件发生时执行代码。
当 HTML 元素”有事情发生“时,浏览器就会生成事件:
onclick=JavaScript
按钮被点击时改变
元素的背景色代码 行内改变
<html>
<body>
<input type="button"
onclick="document.body.style.backgroundColor='green';"
value="改变背景色">
</body>
</html>
或者 设置函数改变
<html>
<body>
<script>
function ChangeBackground()
{
document.body.style.backgroundColor="green";
}
</script>
<input type="button" onclick="ChangeBackground()" value="改变背景色" />
</body>
</html>
显示
点击按钮前
点击按钮后
代码
<html>
<body style="background-color:rgb(185,100,185)">
<h1 onclick="this.innerHTML='我变成一只鸟了'">你点我就变!</h1>
<p onclick="this.innerHTML='一只特立独行的猪'">王小波的一篇文章</p>
<button onclick="this.innerHTML='大爷,快来玩呀!'">你知道鸡怎么叫吗?</button>
</body>
</html>
点击前
全部点击后
代码
<html>
<body>
<p id="p1">肉菜千万里</p>
<script>
function ChangeText()
{
document.getElementById("p1").innerHTML="看我七十二变";
}
function ChangeColor()
{
document.getElementById("p1").style.color="green";
}
</script>
<input type="button" onclick="ChangeText(),ChangeColor()" value="点我呀" />
</body>
</html>
结果
代码
<html>
<body style="background-color:rgb(185,100,1)">
<script>
function changetext(id)
{
id.innerHTML="路就在脚下";
}
function changeColor(id)
{
id.style.color="blue";
}
</script>
</head>
<body>
<h1 onclick="changetext(this)">点我我就变</h1>
<p onclick="changetext(this),changeColor(this)">我和上面内容是一样的,颜色不一样哦</p>
</body>
</html>
点击前结果
全部点击后结果
使用事件属性,向HTML元素分配事件。
代码
<html>
<body style="background-color:rgb(100,125,1)">
<p>点击按钮执行 <b>displayDate()</b> 函数。</p>
<button onclick="displayDate()">老狼老狼几点了</button>
<script>
function displayDate()
{
document.getElementById("demo").innerHTML=Date();
}
</script>
<p id="demo"></p>
</body>
</html>
点击前 点击后,显示年月日和具体时间
代码
<html>
<body style="background-color:rgb(100,160,1)">
<p>点击按钮来执行 <b>displayDate()</b> 函数。</p>
<button id="myBtn">现在几点了</button>
<script>
document.getElementById("myBtn").onclick=function(){displayDate()};
function displayDate()
{
document.getElementById("demo").innerHTML=Date();
}
</script>
<p id="demo"></p>
</body>
</html>
点击前
点击后
当用户进入或离开页面时,会触发 onload 和 onunload 事件。
onload 事件可用于检查访客的浏览器类型和版本,以便基于这些信息来加载不同版本的网页。
onload 和 onunload 事件可用于处理 cookies。
代码
<html>
<body onload="checkCookies()" style="background-color:rgb(125,160,1)">
<script>
function checkCookies()
{
if (navigator.cookieEnabled==true)
{
alert("Cookies are enabled")
}
else
{
alert("Cookies are not enabled")
}
}
</script>
<p>弹出的提示框会告诉你浏览器是否已启用 cookie。</p>
</body>
</html>
进入页面时,出现
onchange 事件常用于输入字段的验证。
代码
<html>
<body style="background-color:rgb(110,187,125)">
<script>
function myFunction()
{
var x=document.getElementById("fname");
x.value=x.value.toUpperCase();
}
function yourFunction()
{
var x=document.getElementById("lower");
x.value=x.value.toLowerCase();
}
function textFunction()
{
var x=document.getElementById("textLength");
x.value=x.value.length;
}
</script>
</head>
<body>
<h4>请输入你的英文名:<input type="text" id="fname" onchange="myFunction()"></h4>
<p>当你离开输入框时,被触发的函数会把你输入的文本转换为大写字母。</p>
<br>
<h4>请输入大写字母:<input type="text" id="lower" onchange="yourFunction()"></p>
<p>当你离开输入框时,被触发的函数会把你输入的文本转换为小写写字母。</p>
<br>
<h4>请输入字母:<input type="text" id="textLength" onchange="textFunction()"></p>
<p>当你离开输入框时,被触发的函数会把你计算输入的文本长度,包含空格。</p>
</body>
</html>
输入字段前
输入字段后
onmouseover 和 onmouseout 事件可用于在鼠标指针移动到或离开元素时触发函数
代码
<html>
<body style="background-color:rgb(110,187,125)">
<div
onmouseover="mOver(this)"
onmouseout="mOut(this)"
style="background-color:#D94A38;width:200px;height:50px;padding-top:25px;text-align:center;">
<h4>Mouse Over Me</h4>
</div>
<script>
function mOver(obj)
{
obj.innerHTML="真舒服"
}
function mOut(obj)
{
obj.innerHTML="让鼠标滑过我呀"
}
</script>
</body>
</html>
初始页面 鼠标滑过 鼠标离开
onmousedown、onmouseup 以及 onclick 事件是鼠标点击的全部过程。
首先当某个鼠标按钮被点击时,触发 onmousedown 事件。
然后,当鼠标按钮被松开时,触发 onmouseup 事件。
最后,当鼠标点击完成时,触发 onclick 事件。
代码
<html>
<body style="background-color:rgb(180,187,125)">
<!--点击,触发函数-->
<div
onmousedown="mDown(this)"
onmouseup="mUp(this)"
style="background-color:#D94A38;width:200px;height:50px;padding-top:25px;text-align:center;">
<p>点我呀</p>
</div>
<div
onmousedown="mouseDown(this)"
onmouseup="mouseUp(this)"
style="background-color:#999999;width:400px;height:50px;padding:25px 25px 25px 25px;text-align:right;">
<h3>来玩呀!</h3>
</div>
<script>
function mDown(obj)
{
obj.style.backgroundColor="#1ec5e5";
obj.innerHTML="放开鼠标"
}
function mUp(obj)
{
obj.style.backgroundColor="#D94A66";
obj.innerHTML="see you"
}
function mouseDown(obj)
{
obj.style.backgroundColor="#e12523";
obj.innerHTML="放开我";
}
function mouseUp(obj)
{
obj.style.backgroundColor="#aaa";
obj.innerHTML="不要走";
}
</script>
</body>
</html>
初始结果 按住鼠标时 松开鼠标时
attributes
节点(元素)的属性节点
length 属性定义节点列表中节点的数量,可用来循环节点列表。
代码
<html>
<body style="background-color:rgb(180,187,125)">
<h3>我是爷爷,我不变</h3>
<p>我是大娃</p>
<p>我是二娃</p>
<p>我是三娃</p>
<h6>下面是利用length循环了一遍。</h6>
<script>
x=document.getElementsByTagName("p");
for (i=0;i<x.length;i++)
{
document.write(x[i].innerHTML);
document.write("<br>");
}
</script>
</body>
</html>
结果
parentNode
节点(元素)的父节点
代码
<html>
<body style="background-color:rgb(1,187,125)">
<div>
<p id="intro">我是大狗</p>
<p>我是二狗</p>
</div>
<script>
x=document.getElementById("intro");
document.write(x.firstChild.nodeValue);
document.write(x.lastChild.nodeValue);
</script>
</body>
</html>
结果
document.documentElement
属性 访问全部文档
document.body
属性 访问文档的主体
代码
<html>
<body style="background-color:rgb(180,125,120)">
<p>Hello World!</p>
<div>
<p>DOM 很有用!</p>
<p>本例演示 <b>document.body</b> 属性。</p>
</div>
<script>
alert(document.body.innerHTML);
</script>
</body>
</html>
结果
代码
<html>
<body style="background-color:rgb(225,125,120)">
<script type="text/javascript">
function changeLink()
{
document.getElementById('myAnchor').innerHTML="找度娘";
document.getElementById('myAnchor').href="https://www.baidu.com/";
document.getElementById('myAnchor').target="_blank";
document.getElementById("myAnchor").style="color:yellow";
document.getElementById("myAnchor").style="font-size:32px";
}
</script>
</head>
<body>
<a id="myAnchor" href="https://cn.bing.com/">访问Bing</a>
<input type="button" onclick="changeLink()" value="点我呀">
<!--在本例中,我们改变超链接的文本和 URL。我们也改变 target 属性。target 属性的默认设置是 "_self",这意味着会在相同的窗口中打开链接。通过把 target 属性设置为 "_blank",链接将在新窗口中打开。->
</body>
</html>
点击前 点击后
代码
<html>
<head>
<style type="text/css">
a:active {color:black}
</style>
<script type="text/javascript">
function getfocus()
{document.getElementById('myAnchor').focus()}
function losefocus()
{document.getElementById('myAnchor').blur()}
</script>
</head>
<body style="background-color:rgb(225,159,111)">
<a id="myAnchor" href="#">众里寻他千百度</a>
<br /><br/>
<input type="button" onclick="getfocus()" value="获得焦点">
<input type="button" onclick="losefocus()" value="失去焦点">
</body>
</html>
点击前
聚焦
散焦
<html>
<head>
<script type="text/javascript">
function accesskey()
{
document.getElementById('w3').accessKey="w"
document.getElementById('w3dom').accessKey="d"
}
</script>
</head>
<body onload="accesskey()" style="background-color:rgb(250,250,111)">
<p><a id="w3" href="https://cn.bing.com/">必应</a> (请使用 Alt + w 给该链接赋予焦点)</p>
<p><a id="w3dom" href="http://www.baidu.com">百度</a> (请使用 Alt + d 为该链接赋予焦点)</p>
</body>
</html>
结果
代码
<html>
<body style="background-color:rgb(170,170,111)">
<script type="text/javascript">
document.write("我自横刀向天笑")
document.write("<h1>谭嗣同</h1>")
</script>
</body>
</html>
结果
代码
<html>
<head>
<title>标题党</title>
</head>
<body style="background-color:rgb(225,159,111)">
<p id="intro">该文档的标题是:</p>
<script type="text/javascript">
document.write(document.title);
</script>
</body>
</html>
结果
代码
<html>
<body style="background-color:rgb(225,159,111)">
该文档的 URL 是:
<script type="text/javascript">
document.write(document.URL)
</script>
</body>
</html>
结果
代码
<html>
<body style="background-color:rgb(225,250,111)">
<p>referrer 属性返回加载本文档的文档的 URL。</p>
本文档的 referrer 是:
<script type="text/javascript">
document.write(document.referrer)
</script>
</body>
</html>
结果
代码
<html>
<body style="background-color:rgb(250,159,111)">
本文档的域名是:
<script type="text/javascript">
document.write(document.domain)
</script>
</body>
</html>
结果
什么是HTML DOM?
DOM,即文档对象模型。
DOM包括核心DOM、XML DOM 和HTML DOM。
HTML DOM以HTML元素为对象,定义如何获取、修改、添加或删除HTML元素及属性的标准。
参考:DOM