什么是DOM
DOM,全称Documnet Object Model文档 对象 模型。
文档树

获取元素节点(通过document对象调用)
浏览器为我们提供的文档节点对象Documne
,这个对象是window属性,可以直接在页面中直接使用,文档节点代表的是整个网页##
getElementByid()
-
getElementByid("id")
通过根据ID
属性获取一个
节点元素
<div id="div">我是div</div>
<script>
var div = document.getElementById("div");
console.log(div);
</script>

getElementsByTagName()
-
getElementsByTagName("Element标签名")
通过标签名
获取一组
元素节点对象
- 这个方法会返回一个类数组对象,所有查询到的元素都会封装到对象中
- 可以通过下标的形式访问里面的内容
- 通过
length
方法会返回伪数组的长度
<ul>
<li>江流</li>
<li>心猿</li>
<li>木龙</li>
<li>刀圭</li>
<li>意马</li>
</ul>
<script>
var lis = document.getElementsByTagName("li");
console.log(lis);
console.log(lis.length);
</script>

getElementsByName()
-
getElementsByName("name")
通过name
属性获取一组
元素节点对象
- 这个方法会返回一个类数组对象,所有查询到的元素都会封装到对象中
- 可以通过下标的形式访问里面的内容
- 通过
length
方法会返回伪数组的长度
<div name="xiyou">西游记</div>
<ul>
<li name="xiyou">江流</li>
<li name="xiyou">心猿</li>
<li name="xiyou">木龙</li>
<li name="xiyou">刀圭</li>
<li name="xiyou">意马</li>
</ul>
<script>
var xiyous = document.getElementsByName("xiyou");
console.log(xiyous);
console.log(xiyous.length);
</script>

事件
事件,就是用户和浏览器之间的交互行为,比如:点击按钮,鼠标移动,关闭窗口。
可以在事件对应属性中设置js代码,当事件触发时,这些代码将会执行。
常见的 HTML 事件
onclick
<button id="button" onclick="alert('点我干嘛?')">我是button</button>

onmouseover
<button id="button" onmouseover="alert('点我干嘛?')">我是button</button>

onmouseout
onchange
onkeydown
onload
- 浏览器已经完成页面加载
- 通常用为
window
绑定一个onload
事件,就可以把js代码
放在里面,然后把script
代码放在在head标签
前面,便于维护和管理代码。
window.onload = function(){
代码块...
};
绑定事件
- 可以为HTML元素的对应事件绑定处理函数的形式来响应事件
- 这样当事件被触发时,其对应的函数将会被调用
例如以上面的onclick
为例:
<button id="btn">点我</button>
<script>
var btn = document.getElementById("btn");
console.log(btn);
btn.onclick = function () {
alert('叫你点你就点,见不见呀?');
}
</script>

获取元素节点的子节点(通过具体的元素节点调用)
getElementsByTagName()
-
getElementsByTagName("子元素名")
,这是一个方法
,该方法通过具体元素节点调用时,会返回当前节点的指定标签名后代节点。(注意:需要分清上面被document
调用时的区别)
<ul id="xiyou">
<li >江流</li>
<li >心猿</li>
<li >木龙</li>
<li >刀圭</li>
<li >意马</li>
</ul>
<script>
var xiyou = document.getElementById("xiyou");
var lis = xiyou.getElementsByTagName('li');
console.log(lis);
console.log(lis.length);
</script>

childNodes
-
childNodes
是一个属性
,表示当前节点的所有子节点
-
childNodes
属性会获取包括文本节点在内的所有节点
- 根据
DOM标准
标签间空白也会当成文本节点
- 在IE8及以下的浏览器中,不会将空白文本当成子节点
<ul id="xiyou">
<li >江流</li>
<li >心猿</li>
<li >木龙</li>
<li >刀圭</li>
<li >意马</li>
</ul>
<script>
var ul = document.getElementById("xiyou");
var ulChilds = ul.childNodes;
console.log(ulChilds);
console.log(ulChilds.length);
</script>

children
-
children
属性可以获取当前元素的所有子元素(注意:是子元素,上面childNodes
是子节点)
- 可以弥补上面
childNodes
的缺点,即不包括空白文本
<ul id="xiyou">
<li >江流</li>
<li >心猿</li>
<li >木龙</li>
<li >刀圭</li>
<li >意马</li>
</ul>
<script>
var ul = document.getElementById("xiyou");
var ulChilds = ul.children;
console.log(ulChilds);
console.log(ulChilds.length);
</script>

firstChild
-
firstChild
是一个属性
,表示当前节点的第一个子节点(包括空白文本)
<ul id="xiyou">
<li >江流</li>
<li >心猿</li>
<li >木龙</li>
<li >刀圭</li>
<li >意马</li>
</ul>
<script>
var ul = document.getElementById("xiyou");
var ulFirstChild = ul.firstChild;
console.log(ulFirstChild);
</script>

firstElementChild
-
firstElementChild
属性获取当前元素的第一个子元素(不包含空白文本)
- 不支持IE8及以下的浏览器
<ul id="xiyou">
<li >江流</li>
<li >心猿</li>
<li >木龙</li>
<li >刀圭</li>
<li >意马</li>
</ul>
<script>
var ul = document.getElementById("xiyou");
var ulfirstElementChild = ul.firstElementChild;
console.log(ulfirstElementChild);
</script>

lastChild
-
lastChild
是一个属性
,表示当前节点的最后一个子节点(包括空白文本)
<ul id="xiyou">
<li >江流</li>
<li >心猿</li>
<li >木龙</li>
<li >刀圭</li>
<li >意马</li>
</ul>
<script>
var ul = document.getElementById("xiyou");
var ullastChild = ul.lastChild;
console.log(ullastChild);
</script>

lastElementChild
-
lastElementChild
属性获取当前元素的最后一个子元素(不包含空白文本)
- 不支持IE8及以下的浏览器
<ul id="xiyou">
<li >江流</li>
<li >心猿</li>
<li >木龙</li>
<li >刀圭</li>
<li >意马</li>
</ul>
<script>
var ul = document.getElementById("xiyou");
var ullastElementChild = ul.lastElementChild;
console.log(ullastElementChild);
</script>

获取父节点和兄弟节点(通过具体的节点调用)
parentNode
<ul>
<li >江流</li>
<li id="monkey">心猿</li>
<li >木龙</li>
<li >刀圭</li>
<li >意马</li>
</ul>
<script>
var li = document.getElementById("monkey");
var liParen = li.parentNode;
console.log(liParen);
</script>

previousSibling
-
previousSibling
属性,查询当前节点的前一个兄弟节点(包括空白文本节点)
<ul>
<li >江流</li>
<li id="monkey">心猿</li>
<li >木龙</li>
<li >刀圭</li>
<li >意马</li>
</ul>
<script>
var li = document.getElementById("monkey");
var liPrevious = li.previousSibling;
console.log(liPrevious);
</script>

previousElementSibling
-
previousElementSibling
属性,查询当前节点的前一个兄弟元素(不包括空白文本)
<ul>
<li >江流</li>
<li id="monkey">心猿</li>
<li >木龙</li>
<li >刀圭</li>
<li >意马</li>
</ul>
<script>
var li = document.getElementById("monkey");
var liPrevious = li.previousElementSibling;
console.log(liPrevious);
</script>

nextSibling
-
nextSibling
属性,查询当前节点的后一个兄弟节点(包括空白文本)
<ul>
<li >江流</li>
<li id="monkey">心猿</li>
<li >木龙</li>
<li >刀圭</li>
<li >意马</li>
</ul>
<script>
var li = document.getElementById("monkey");
var liNext = li.nextSibling;
console.log(liNext);
</script>

nextElementSibling
-
nextElementSibling
属性,查询当前节点的后一个兄弟节点(不包括空白文本)
<ul>
<li >江流</li>
<li id="monkey">心猿</li>
<li >木龙</li>
<li >刀圭</li>
<li >意马</li>
</ul>
<script>
var li = document.getElementById("monkey");
var liNext = li.nextElementSibling;
console.log(liNext);
</script>

HTML5新增的获取方式(通过document对象调用)
querySelector()
-
querySelector("选择器名")
方法用于返回指定选择器的第一个元素对象
- IE8支持该方法,IE7及以下不支持
<ul>
<li class="xiyou" >江流</li>
<li id="monkey">心猿</li>
<li class="xiyou" >木龙</li>
<li class="xiyou" >刀圭</li>
<li class="xiyou" >意马</li>
</ul>
<script>
var liId = document.querySelector("#monkey");
var liClass = document.querySelector(".xiyou")
var liElement = document.querySelector("li")
console.log("通过ID选择器:",liId);
console.log("通过Class选择器:",liClass);
console.log("通过Element选择器:",liElement);
</script>

querySelectorAll()
-
querySelector("选择器名")
方法用于返回指定选择器的所有元素对象集合
- 该方法会返回一个类数组对象,所有查询到的元素都会封装到对象中
-
<ul>
<li class="xiyou" >江流</li>
<li id="monkey">心猿</li>
<li class="xiyou" >木龙</li>
<li class="xiyou" >刀圭</li>
<li class="xiyou" >意马</li>
</ul>
<script>
var liClasses = document.querySelectorAll(".xiyou")
var liElements = document.querySelectorAll("li")
console.log("通过Class选择器:",liClasses);
console.log("通过Element选择器:",liElements);
</script>

getElementsByClassName()
-
getElementsByClassName("class名")
方法,用于通过类名来获取某些元素的集合
- 该方法会返回一个类数组对象,所有查询到的元素都会封装到对象中
- IE8及以下版本不支持该方法,IE8可以使用
querySelectorAll()
替代该方法
<ul>
<li class="xiyou" >江流</li>
<li id="monkey">心猿</li>
<li class="xiyou" >木龙</li>
<li class="xiyou" >刀圭</li>
<li class="xiyou" >意马</li>
</ul>
<script>
var liClasses = document.getElementsByClassName("xiyou")
console.log("通过Class选择器:",liClasses);
</script>
