24 节点

91 阅读1分钟

文档 document

元素 element(页面中的标签都叫元素p、div、 a元素就是标签)

节点 Node页面中所有的内容都叫做节点(元素、标签、属性、文本——文字、空格、换行、回车 )

DOM节点 HTML文档

元素节点 标签

属性节点 属性

文本节点 文本内容

注释节点 注释

节点属性(可以用标签.出来,元素.出来,属性.出来,文本.出来)

节点类型 nodeType

1代表标签节点

2代表属性节点

3代表文本节点

节点名字 nodeName

标签节点——获取大写的标签名

属性节点——获取小写的属性名

文本节点——获取#text

节点的值 nodeValue

标签节点——null

属性节点——属性值

文本节点——文本内容

例:

<body>
<div id="dv">
    <span>span标签</span>
    <p>标签</p>
    <ul id="uu">
        <li>鸣人</li>
        <li>佐助</li>
        <li id="three">小樱</li>
        <li>我爱罗</li>
        <li>小李</li>
    </ul>
</div>
<script src="publick.js"></script>
<script>
    var ulObj = my$("uu");
    //ul标签的父节点    ul标签的父级元素——元素就是标签
    console.log(ulObj.parentNode); //<div></div>
    //获取父级元素
    console.log(ulObj.parentElement); //<div></div>
    //div是ul的父节点也是ul的父元素
    
    //获取div的nodeType、nodeName、nodeValue
    console.log(ulObj.parentNode.nodeType); //1代表标签节点
    console.log(ulObj.parentNode.nodeName); //DIV
    console.log(ulObj.parentNode.nodeValue); //null
    
    //追踪父标签
    console.log(ulObj.parentNode); //div
    console.log(ulObj.parentNode.parentNode); //body
    console.log(ulObj.parentNode.parentNode.parentNode); //html
    console.log(ulObj.parentNode.parentNode.parentNode.parentNode);         //document
   console.log(ulObj.parentNode.parentNode.parentNode.parentNode.parentNode); //null
   
var dvObj = document.getElementById("dv");
// 子节点,节点的范围大,包含了标签,文本,换行...
console.log(dvObj.childNodes);
// 子元素----元素就是标签
console.log(dvObj.children);
//总结:节点的范围大(回车也算文本节点,换行,空格),元素的范围小---元素就是标签
for(var i = 0; i < dvObj.childNodes.length; i++){
    /* 
    nodeType ---> 节点类型 1--标签,2--属性,3---文本
    nodeName ---> 节点名称 大写的标签--标签,小写的属性名--属性,#text--文本
    nodeValue ---> 节点值的值 标签--null 属性---属性的值,文本--文本的内容
    */
    var node = dvObj.childNodes[i];
    console.log(node.nodeType+"====="+node.nodeName+"===="+node.nodeValue);   
}
// 3.获取属性的节点
var dvObj = document.getElementById("dv");
var node = dvObj.getAttributeNode("id");//属性节点
console.log(node.nodeType+"====="+node.nodeName+"===="+node.nodeValue); 
</script>
</body>

获取节点元素的方式

var ulObj = document.getElementById("uu");
//父级节点
console.log(ulObj.parentNode);
//父级元素
console.log(ulObj.parentElement);
//子级节点
console.log(ulObj.childNodes); //11 换行属于文本
//子级元素——子标签
console.log(ulObj.children); //5
扩展;
//第一个子节点
console.log(ulObj.firstChild);
//第一个子元素
console.log(ulObj.firstElementChild); //<li></li>
//最后一个子节点
console.log(ulObj.lastChild);
//最后一个子元素
console.log(ulObj.lastElementChild);
//某个元素的前一个兄弟节点
console.log(my$("three").previousSibling);
//某元素的前一个兄弟元素
console.log(my$("three").previousElementSibling); //<li></li>
//某个元素的后一个兄弟节点
console.log(my$("three").nextSibling);
//某个元素的后一个兄弟元素
console.log(my$("three").nextElementSibling);

注:从第一个子节点开始,在IE8等低版本浏览器中叫做元素,第一个子元素,IE8浏览器不支持

需求:点击按钮实现变色

 <style>
    div{
        width: 300px;
        height: 500px;
        border:1px solid #000;
    }
</style>
<body>
<input type="button" value="改变p标签的颜色" id="btn">
<div id="dv">
   <span>我是span奥特曼</span>
   <p>我是段落P迪迦</p>
   <span>我是span奥特曼</span>
   <p>我是段落P迪迦</p>
   <span>我是span奥特曼</span>
   <p>我是段落P迪迦</p>
   <span>我是span奥特曼</span>
   <p>我是段落P迪迦</p>
   <span>我是span奥特曼</span>
   <p>我是段落P迪迦</p>
   <a href="http://www.baidu.com">百度</a>
   </div>
   <script src="publick.js"></script>
   <script>
   my$("btn").onclick = function(){
   //获取div
   var dvObj = my$("dv");
   //获取div里的所有子节点
   var nodes = dvObj.childNodes; //伪数组
   //遍历
   for(var i = 0; i < nodes.length; i++){
   //判断
   if(nodes[i].nodeType == 1 && nodes[i].nodeName == "P"){
        nodes[i].style.backgroundColor = "pink";
    }
  }
}
</script>