节点
节点:Node——构成HTML文档最基本的单元。
常用节点分为四类:
- 文档节点:整个HTML文档
- 元素节点:HTML文档中的HTML标签
- 属性节点:元素的属性
- 文本节点:HTML标签中的文本内容
文档节点(document)
- 文档节点
document
,代表的是整个HTML文 档,网页中的所有节点都是它的子节点。document
对象作为window对象的属性存在 的,我们不用获取可以直接使用。- 通过该对象我们可以在整个文档访问内查找节 点对象,并可以通过该对象创建各种节点对象。
元素节点(Element)
- HTML中的各种标签都是元素节点,这也是我们最常用的一个节点。
- 浏览器会将页面中所有的标签都转换为一个元素节点, 我们可以通过document的方法来获取元素节点。
- 比如:
- document.getElementById()
根据id属性值获取一个元素节点对象。
文本节点(Text)
- 文本节点表示的是HTML标签以外的文本内容,任意非HTML的文本都是文本节点。
- 它包括可以字面解释的纯文本内容。
- 文本节点一般是作为元素节点的子节点存在的。
- 获取文本节点时,一般先要获取元素节点。再通过元素节点获取文本节点。
- 例如:
- 元素节点 . firstChild;
- 获取元素节点的第一个子节点,一般为文本节点
属性节点(Attr)
- 属性节点表示的是标签中的一个一个的属 性,这里要注意的是属性节点并非是元素 节点的子节点,而是元素节点的一部分。
- 可以通过元素节点来获取指定的属性节点。
- 例如:
- 元素节点 . getAttributeNode(“属性名”);
注意:我们一般不使用属性节点。
获取元素节点
- 通过document对象调用
- getElementById(),通过
id
属性获取一个
元素节点对象 - getElementsByTagName() ,通过
标签名
获取一组
元素节点对象 - getElementsByName(),通过
name
属性获取一组
元素节点对象
- getElementById(),通过
获取元素节点的子节点
- 通过具体的元素节点调用
- getElementsByTagName(),返回当前节点的指定标签名后代节点
- childNodes,表示当前节点的所有子节点
- childNodes属性会获取包括文本节点在呢的所有节点
- 根据DOM标签标签间空白也会当成文本节点
注意:在IE8及以下的浏览器中,不会将空白文本当成子节点,所以该属性在IE8中会返回4个子元素而其他浏览器是9个
- children,可以获取当前元素的所有子元素
- firstChild,表示当前节点的第一个子节点
- lastChild,表示当前节点的最后一个子节点
获取父节点和兄弟节点
- 通过具体的节点调用
- parentNode,表示当前节点的父节点
- previousSibling,表示当前节点的前一个兄弟节点
不支持IE8及以下的浏览器
- nextSibling,表示当前节点的后一个兄弟节点
元素节点的属性
- 获取,元素对象.属性名
- 例:element.value
- element.id
- element.className
- 设置,元素对象.属性名=新的值
- element.value = “hello”
- element.id = “id01”
- element.className = “newClass”
其他属性
nodeValue
,文本节点可以通过nodeValue属性获取和设置 文本节点的内容innerHTML
,元素节点通过该属性获取和设置标签内部的 html代码
使用CSS选择器进行查询
querySelector()
querySelectorAll()
- 这两个方法都是用document对象来调用,两个方法使用相同, 都是传递一个选择器字符串作为参数,方法会自动根据选择器 字符串去网页中查找元素。
- 不同的地方是querySelector()只会返回找到的第一个元素,而 querySelectorAll()会返回所有符合条件的元素。
节点的修改
这里的修改我们主要指对元素节点的操作。
- 创建节点
- document.createElement(标签名)
- 删除节点
- 父节点.removeChild(子节点)
- 替换节点
- 父节点.replaceChild(新节点, 旧节点)
- 插入节点
- 父节点.appendChild(子节点)
- 父节点.insertBefore(新节点 , 旧节点)
DOM节点其他查询方法
//获取body标签
var body = document.getElementsByTagName("body")[0];
/*
* 在document中有一个属性body,它保存的是body的引用
*/
var body = document.body;
/*
* document.documentElement保存的是html根标签
*/
var html = document.documentElement;
//获取页面所有元素
var all = document.getElementsByTagName("*");
/*
* document.all代表页面中所有的元素
*/
var all = document.all;
/*
* 根据元素的class属性值查询一组元素节点对象
* getElementsByClassName()可以根据class属性值获取一组元素节点对象,
* 但是该方法不支持IE8及以下的浏览器
*/
var box1 = document.getElementsByClassName("box1");
//获取页面中的所有的div
var divs = document.getElementsByTagName("div");
//获取class为box1中的所有的div
//.box1 div
/*
* document.querySelector()
* - 需要一个选择器的字符串作为参数,可以根据一个CSS选择器来查询一个元素节点对象
* - 虽然IE8中没有getElementsByClassName()但是可以使用querySelector()代替
* - 使用该方法总会返回唯一的一个元素,如果满足条件的元素有多个,那么它只会返回第一个
*/
var div = document.querySelector(".box1 div");
/*
* document.querySelectorAll()
* - 该方法和querySelector()用法类似,不同的是它会将符合条件的元素封装到一个数组中返回
* - 即使符合条件的元素只有一个,它也会返回数组
*/
box1 = document.querySelectorAll("#box2");
复选框练习
sad
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>全选练习</title>
<script type="text/javascript">
window.onload = function(){
//获取四个多选框items
var items = document.getElementsByName("items");
//获取全选/全不选的多选框
var checkedAllBox = document.getElementById("checkedAllBox");
/*
* 全选按钮
* - 点击按钮以后,四个多选框全都被选中
*/
//1.#checkedAllBtn
//为id为checkedAllBtn的按钮绑定一个单击响应函数
var checkedAllBtn = document.getElementById("checkedAllBtn");
checkedAllBtn.onclick = function(){
//遍历items
for(var i=0 ; i<items.length ; i++){
//通过多选框的checked属性可以来获取或设置多选框的选中状态
//alert(items[i].checked);
//设置四个多选框变成选中状态
items[i].checked = true;
}
//将全选/全不选设置为选中
checkedAllBox.checked = true;
};
/*
* 全不选按钮
* - 点击按钮以后,四个多选框都变成没选中的状态
*/
//2.#checkedNoBtn
//为id为checkedNoBtn的按钮绑定一个单击响应函数
var checkedNoBtn = document.getElementById("checkedNoBtn");
checkedNoBtn.onclick = function(){
for(var i=0; i<items.length ; i++){
//将四个多选框设置为没选中的状态
items[i].checked = false;
}
//将全选/全不选设置为不选中
checkedAllBox.checked = false;
};
/*
* 反选按钮
* - 点击按钮以后,选中的变成没选中,没选中的变成选中
*/
//3.#checkedRevBtn
var checkedRevBtn = document.getElementById("checkedRevBtn");
checkedRevBtn.onclick = function(){
//将checkedAllBox设置为选中状态
checkedAllBox.checked = true;
for(var i=0; i<items.length ; i++){
items[i].checked = !items[i].checked;
//判断四个多选框是否全选
//只要有一个没选中则就不是全选
if(!items[i].checked){
//一旦进入判断,则证明不是全选状态
//将checkedAllBox设置为没选中状态
checkedAllBox.checked = false;
}
}
//在反选时也需要判断四个多选框是否全都选中
};
/*
* 提交按钮:
* - 点击按钮以后,将所有选中的多选框的value属性值弹出
*/
//4.#sendBtn
//为sendBtn绑定单击响应函数
var sendBtn = document.getElementById("sendBtn");
sendBtn.onclick = function(){
//遍历items
for(var i=0 ; i<items.length ; i++){
//判断多选框是否选中
if(items[i].checked){
alert(items[i].value);
}
}
};
//5.#checkedAllBox
/*
* 全选/全不选 多选框
* - 当它选中时,其余的也选中,当它取消时其余的也取消
* 在事件的响应函数中,响应函数是给谁绑定的this就是谁
*/
//为checkedAllBox绑定单击响应函数
checkedAllBox.onclick = function(){
//alert(this === checkedAllBox);
//设置多选框的选中状态
for(var i=0; i <items.length ; i++){
items[i].checked = this.checked;
}
};
//6.items
/*
* 如果四个多选框全都选中,则checkedAllBox也应该选中
* 如果四个多选框没都选中,则checkedAllBox也不应该选中
*/
//为四个多选框分别绑定点击响应函数
for(var i=0 ; i<items.length ; i++){
items[i].onclick = function(){
// //将checkedAllBox设置为选中状态
checkedAllBox.checked = true;
console.log(checkedAllBox.checked);
for(var j=0 ; j<items.length ; j++){
//判断四个多选框是否全选
//只要有一个没选中则就不是全选
if(!items[j].checked){
//一旦进入判断,则证明不是全选状态
//将checkedAllBox设置为没选中状态
checkedAllBox.checked = false;
//一旦进入判断,则已经得出结果,不用再继续执行循环
break;
}
}
console.log(checkedAllBox.checked);
};
}
};
</script>
</head>
<body>
<form method="post" action="">
你爱好的运动是?<input type="checkbox" id="checkedAllBox" />全选/全不选
<br />
<input type="checkbox" name="items" value="足球" />足球
<input type="checkbox" name="items" value="篮球" />篮球
<input type="checkbox" name="items" value="羽毛球" />羽毛球
<input type="checkbox" name="items" value="乒乓球" />乒乓球
<br />
<input type="button" id="checkedAllBtn" value="全 选" />
<input type="button" id="checkedNoBtn" value="全不选" />
<input type="button" id="checkedRevBtn" value="反 选" />
<input type="button" id="sendBtn" value="提 交" />
</form>
</body>
</html>