目录
  1. 1. 节点
    1. 1.1. 文档节点(document)
    2. 1.2. 元素节点(Element)
    3. 1.3. 文本节点(Text)
    4. 1.4. 属性节点(Attr)
    5. 1.5. 获取元素节点
    6. 1.6. 获取元素节点的子节点
    7. 1.7. 获取父节点和兄弟节点
    8. 1.8. 元素节点的属性
    9. 1.9. 其他属性
    10. 1.10. 使用CSS选择器进行查询
    11. 1.11. 节点的修改
    12. 1.12. DOM节点其他查询方法
    13. 1.13. 复选框练习
JavaScript之DOM节点

节点

节点: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属性获取一组元素节点对象

获取元素节点的子节点

  • 通过具体的元素节点调用
    • 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

<!DOCTYPE html>
<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>
文章作者: Jachie Xie
文章链接: https://xjc5772.github.io/2020-02/19/%E5%AD%A6%E4%B9%A0/%E5%89%8D%E7%AB%AF%E5%AD%A6%E4%B9%A0/JS/JavaScript%E4%B9%8BDOM%E8%8A%82%E7%82%B9/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 XJC&Blog
打赏
  • 微信
  • 支付宝

评论