js基础知识(5)

js基础知识

获取DOM的方式及 节点的操作

获取DOM的方式

1.document.documentElement
	获取HTML
2.document.head
	获取head
3.document.body
	获取body
4.document.getElementById()
	在document上下文中获取元素(通过Id获取的元素是一个元素对象,获取不到就是null)
5.context.getElementsByTagName(‘标签名’)
	在指定的标签中(此处指定的标签为,context代表的标签)通过标签名获取元素,获取的是一个元素集合,如果没有获取到元素,那就是空元素集合
6.context.getElementsByClassName(‘类名’)
	在指定的上下文中通过class名获取元素,获取的是一个元素集合,如果没有获取到元素,那就是空元素集合【在IE6~8下不兼容】
7.context.querySelector()
	在指定上下文中通过选择器获取第一个元素, 获取不到就是null【在IE6~8下不兼容】
8.context.querySelectorAll()
	在指定上下文中通过选择器获取一组元素集合,获取不到就是空元素集合【在IE6~8下不兼容】

代码

 		 let box1 = document.getElementById('box');
        let box2 = document.getElementsByTagName('div')[0];
        let box3 = document.getElementsByClassName('box')[0];
        let box4 = document.querySelector('#box');
        let box5 = document.querySelectorAll('#box')[0];

例子

!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>获取dom的方式</title>
</head>
<body>
    <div id="box">
        <ul id="navList">
            <li class="aaa">我是第1个li</li>
            <li>我是第2个li</li>
            <li>我是第3个li</li>
        </ul>
        <div>
            <b>111</b>
        </div>
        <div>
            <span>222</span>
        </div>
        <div>
            <p>333</p>
        </div>
        <li class="aaa">我是第4个li</li>
    </div>
    <script>
            /* 
               1、 document.getElementById():在document上下文中获取元素(通过Id获取的元素是一个元素对象,获取不到就是null)
               2、context.getElementsByTagName('标签名'):在指定的上下文中通过标签名获取元素,获取的是一个元素集合,如果没有获取到元素,那就是空元素集合
               3、context.getElementsByClassName(''):在指定的上下文中通过class名获取元素,获取的是一个元素集合,如果没有获取到元素,那就是空元素集合【在IE6~8下不兼容】
               4、document.body/document.head/document.documentElement(获取body、头部、html)
               5、context.querySelector() : 在指定上下文中通过选择器获取第一个元素, 获取不到就是null【在IE6~8下不兼容】
               6、context.querySelectorAll():在指定上下文中通过选择器获取一组元素集合,获取不到就是空元素集合【在IE6~8下不兼容】
            */
        // 获取元素
        // let nav = document.getElementById('navList');
        // 1、let box = document.getElementById('box');
        // 通过Id获取的元素是一个元素对象,获取不到就是null
        	 let lists = nav.getElementsByTagName('i');
             // context.getElementsByTagName('标签名')// 通过指定的上下文获取指定的标签,获取的是一个元素集合,如果没有获取到元素,那就是空元素集合
        // console.log(lists)
        // 2、context.getElementsByClassName()
         	let box = document.getElementById('navList');
         	let list = document.getElementsByClassName('a');
      		 console.log(list)
        // 3、document.body/document.head/document.documentElement
        	 console.log(document.body) // 获取body
         	console.log(document.head) // 获取头部
        	 console.log(document.documentElement) // 获取html
        // 5、context.querySelector
        	let box = document.getElementById('box')
            let ss =  box.querySelector('#navList .a');
           // 在指定上下文中通过选择器获取第一个元素, 获取不到就是null
            console.log(ss)
        // 6、context.querySelectorAll()
        // 在指定上下文中通过选择器获取一组元素集合,获取不到就是空元素集合
         let list = document.querySelectorAll('#navList li:nth-child(2)'); // 获取的是一个元素集合,获取不到就是空元素集合
         console.log(list)
         console.log(box)
    </script>
</body>
</html>

节点的操作

节点(node)概念
		页面中所有的东西都是节点,所有的节点都是对象
节点名 nodeType nodeName nodeValue
元素节点 1 大写的标签名 null
文本节点 3 ‘#text’ 文本的内容、空格、回车(换行)
注释节点 8 ‘#comment’ 注释的内容
文档节点 9 ‘#document’ null

四种节点详解

元素节点
	页面中的标签
文本节点
	包括内容、空格、回车(换行)
注释节点
	写的注释
文档节点
	整个页面,整个文档

操作节点的属性

子节点

childNodes
获取所有子节点
firstChild
获取第一个子节点
lastChild
获取最后一个子节点
previousSibling
获取上一个哥哥节点
nextSibling
获取下一个兄弟节点

元素子节点【在IE6~8下不兼容】

children
获取所有的元素子节点
firstElementChild
获取第一个元素子节点
lastElementChild
获取最后一个元素子节点
previousElementSibling
获取上一个哥哥元素节点
nextElementSibling
获取下一个兄弟元素节点

父节点

parentNode
获取指定元素的父节点
  // 元素节点就是页面中的标签
        // 文本节点包括内容、空格、回车(换行)
        // 注释节点就是你写的注释
        // 文档节点就是整个大文档(页面)
        var box = document.getElementById('box');
        var three = document.getElementById('three')
        // console.log(box.childNodes)
    // 操作节点的属性
    /* 
         childNodes:获取的所有的子节点
         children:获取所有的元素子节点【在IE6~8下不兼容】
         firstChild: 获取第一个子节点
         firstElementChild: 获取第一个元素子节点【在IE6~8下不兼容】
         lastChild:获取最后一个子节点
         lastElementChild:获取最后一个元素子节点【在IE6~8下不兼容】
         previousSibling: 获取上一个哥哥节点
         previousElementSibling:获取上一个哥哥元素节点【在IE6~8下不兼容】
         parentNode
    */
        // childNodes:获取的所有的子节点
        // children:获取所有的元素子节点
         console.log(box.childNodes.length);
         console.log(box.children.length); // [在IE6~8下不兼容]
        // 封装一个children
         function children(context){
             var child = context.childNodes;// 获取元素的所有子节点
            var  ary = []; // 创建一个新数组,用来存放元素子节点
             // 循环每一个子节点
             for (var i = 0; i < child.length; i++) {
                 // 如果子节点的nodeType的值为1,那就说明该子节点是元素子节点
                 // if(child[i].nodeType === 1){
                 //     // 把元素子节点push到新数组中
                 //     ary.push(child[i])
                // }
                 child[i].nodeType === 1?ary.push(child[i]):null;
             }
             return ary
       }
         console.log(children(box).length)
        //================================
        // box.firstChild // 获取第一个子节点
        // box.firstElementChild // 获取第一个元素子节点【在IE6~8下不兼容】
        // console.log(box.firstChild)
        // console.log(box.firstElementChild)
        // box.lastChild
        // box.lastElementChild【在IE6~8下不兼容】
        // console.log(box.lastChild)
        // console.log(box.lastElementChild)
        // =================================
        // three.previousSibling: 获取上一个哥哥节点
        // three.previousElementSibling:获取上一个哥哥元素节点
        // console.log(three.previousSibling)
        // console.log(three.previousElementSibling)
            /* 
            
            <div id="box">
                <!-- 西游记 -->
                <li>孙悟空</li>
                <li>猪八戒</li> <!-- 西游记 -->
                <li id="three">沙悟净</li>
            </div>
    */
            function prev(context){
                var pre = context.previousSibling;
                // if(pre === null){
                //     return pre
                // }
                while(pre.nodeType !==1){
                    pre = pre.previousSibling
                }
                return pre
            }
            console.log(prev(three)) // null
                // console.log(one.previousSibling)
    </script>
</body>
</html>

JS节点的动态增删改

增:createElement()
	创建元素节点
增:createTextNode()
	创建文本节点
增:容器.appendChild(节点)
	把节点插入到容器的末尾
增:容器.insertBefore(新节点, 老节点)
	把节点插入到老节点的前面
删:容器.removeChild(节点)
	移除容器中的节点
克隆:容器.cloneNode()
		容器.cloneNode(true)
				深克隆,完美复刻。
		容器.cloneNode(false)        容器.cloneNode()
				浅克隆,只克隆标签
  js节点的动态增删改 
        createElement:创建元素节点
        createTextNode:创建文本节点
        容器.appendChild(节点):把节点插入到容器的末尾
        容器.insertBefore(新节点, 老节点):把节点插入到老节点的前面
        容器.removeChild(节点):移除容器中的节点
   
        let box = document.createElement('div'); // 动态创建一个元素节点
        let one = document.getElementById('one');
        box.style.width = '200px';
        box.style.height = '200px';
        box.id="box";
        box.className = 'box';
        let text = document.createTextNode('123455');// 动态创建一个文本节点
        box.appendChild(text); // 把文本节点插入到元素节的末尾
        // document.body.appendChild(box) // 把box插入到元素的末尾
        document.body.insertBefore(box, one) // 把box插入到one的前面
        // document.body.removeChild(one) // 移除节点
        console.dir(text)
        console.log(box)

例子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box {
            width: 200px;
            height: 200px;
            margin: 20px auto;
            font-size: 30px;
            color: white;
            background: red;;
        }
    </style>
</head>
<body>
    <div  class="box"><span>111</span></div>
    <script>
        /* 
        节点.cloneNode(true/false);克隆节点,如果传参是true就是深克隆,如果不传参或者传false就是浅克隆(只复制外层元素,不复制里边的内容)
        */
        let one = document.getElementsByClassName('box')[0];
        let clone1 = one.cloneNode(); // 如果不传参,就是浅克隆
        let clone2 = one.cloneNode(true); // 深克隆
        let clone3 = one.cloneNode(false); // 如果不传参,就是浅克隆
        clone1.innerHTML = '<span>222</span>'; // 修改clone1的内容
        clone2.children[0].innerText = '333'; // 修改clone2里的span元素的内容
        document.body.appendChild(clone1); // 把clone1插入到body的末尾
        document.body.appendChild(clone2)// 把clone2插入到body的末尾
        console.log(clone1, clone2, clone3)
    
    </script>

JS创建、获取、移除属性

setAttribute(‘属性名’,属性值);
	 在元素结构中设置属性
getAttribute(‘属性名’)
	在元素结构中获取属性
removeAttribute(‘属性名’);
	在元素结构中移除属性
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <button>1</button>
    <button>2</button>
    <button>3</button>
    <script>
        /* 
        setAttribute('属性名',属性值); 在元素结构中设置属性
        getAttribute('属性名') 在元素结构中获取属性
        removeAttribute('属性名'); 在元素结构中移除属性
        */
        let btns = document.querySelectorAll('button');
        console.log(btns)
        // for (var i = 0; i < btns.length; i++) {
        //     // 把属性存储到元素的堆地址中
        //     btns[i].myIndex  = i;
        //     btns[i].onclick = function(){
        //         // 在相应的元素的堆地址中获得属性名所对应的属性值
        //         alert(this.myIndex)
        //     }
        // }
            //这两种方式不能混淆
        for (var i = 0; i < btns.length; i++) {
            // 把属性存储到元素的结构中,在元素的行内可以看到
            btns[i].setAttribute('data-index',i);
            btns[i].removeAttribute('data-index');
            btns[i].onclick = function(){
                // 获取结构中的属性
                alert(this.getAttribute('data-index'))
            }
        }
        console.log(btns)
        
    
    </script>
</body>
</html>
      
发布了17 篇原创文章 · 获赞 23 · 访问量 379

猜你喜欢

转载自blog.csdn.net/wang_js_amateyr/article/details/103297237