0
点赞
收藏
分享

微信扫一扫

关于操作dom对象,以及案例详解

余寿 2022-03-16 阅读 25

dom

写作思路:先理清楚自己需要用到哪些元素,其次是这些元素需要执行什么样的事件(或者说是需要浏览器作出什么样的响应),然后根据需求编写代码

选择器

  • 作用:选中html元素,在js中一对象形式存在
  • js通过dom对象下属性多次赋值,以及api使用,完成页面动画
  • 注意:选择器返回值,有的是dom对象,有的是集合,如果是集合,需要从集合中取值获取dom对象

document.api

  • document.getElementById()
  • document.getElementByClassName()
  • document.getElementByTagName()
  • document.queryAelector()
  • document.queryAelectorAll()

操作dom对象

  • append() //及那个一个dom元素添加到另一个dom元素中,如 div.append(h4)

  • removeChild() //使用方法:找到 需要更改元素的父元素,然后删除下面的子元素

  • replaceChild() //使用方法:找到 需要更改元素的父元素,然后进行更改下面的子元素

  • 查父元素 dom.parentElement
  • 查子元素们 dom.nextElementSibling /dom.previousElementSibling

示例:

  • dom元素的获取方法: document.querySelector()
    • 例如: var ipt = document.querySelector(‘input’) //获取一个input输入框并将其命名为ipt(或者说是将其赋给ipt)
  • 将一个dom元素放进另一个dom元素中用.innerHTML或者.append
注意:
.innerHTML或者.append
同样都是将一个dom放进另一个dom,但是前者是拼接,后者是覆盖
例如: h4.innerHTML = ipt  //将输入框放进h4里面,如果有多个依次排列
     h4.append(ipt)  //是将输入框直接覆盖原来的内容区之上,如果有多个,只显示最后一个

案列详解1:

    需求:点击h1被点击的字体变红
        //1:获取所有的h1
        var texts = document.querySelectorAll('h1')
            //2:给每一个h1添加点击事件
        texts[0].onclick = function() {
            console.log(1);  
                //3:让被点击的h1变红
                绑定事件的元素就是点击的元素, 也是需要设置样式的元素
            texts[0].style.color = 'red'
        }
        texts[1].onclick = function() {
            console.log('2');
            texts[1].style.color = 'yellow'
        }
        texts[2].onclick = function() {
            console.log('3');
            texts[2].style.color = 'green'
        }
        texts[3].onclick = function() {
                console.log('4');
                texts[3].style.color = 'pink'
            }
效果:点击第一个的时候 字体变红,点击第二的时候字体变黄,依次类推

方法2:
var texts = document.querySelectorAll('h1')
        for (var i = 0; i < texts.length; i++) {
            //因为事件处理执行慢,i变量被污染了
            //所以:使用闭包解决问题,事件处理函数中i是4的问题
            (function(i) {
                texts[i].onclick = function() {
                    console.log(i);
                    texts[i].style.color = 'red'
                }
            })
            (i)
        }
        //为什么没有定时器也会环境污染
        //因为for循环走的更快,函数走的比较慢,当函数开始走的时候,for循环已经走到结尾了


        //如果不使用闭包的话,就会报错说是texts[i]是undefined

案例详解2

<h1>你好</h1>
    <h1>你好</h1>
    <h1>你好</h1>
    <h1>你好</h1>
    <script>
        var texts = document.querySelectorAll('h1')
        for (var i = 0; i < texts.length; i++) {
            //因为事件处理执行慢,i变量被污染了
            //所以:使用闭包解决问题,事件处理函数中i是4的问题
            (function(i) {
                texts[i].onclick = function() {
                    //在添加红色之前,清空所有样式
                    console.log(i);
                    //1:找到所有的标签
                    for (var j = 0; j < texts.length; j++) {
                        texts[j].style.color = ''
                    }
                    // texts[i].style.color = 'red'
                    this.style.color = 'red'
                }
            })
            (i)
        }

        //e.target返回的是触发事件的对象(元素),this  返回的是绑定事件的对象元素
        //e.target 和currentTarget相似,但是currentTarget在ie678中不太常用
效果:当点击某个标签的时候,那个标签变成相应的颜色,当点击别的标签的时候,被点击的标签,变成相应的格式效果,上一次点击的标签格式清空

案例详解3:

效果:在输入框中输入文档,点击添加后,将所输入文档,以拼接的形式添加到目标内容区(本文中为li标签中). 并且在内容区看到每次输入的内容,而且可以看到一共输入了几次.
<div class="content">
        <div class="contro">
            <input type="text">
            <button>添加</button>
        </div>

        <span>输入的次数为: 0</span>
        <ul>
            <li id="text">测试内容为:</li>

        </ul>
    </div>
    <script>
        //完成新增
        //统计用户新增了多少列表:内容是什么
        var btn = document.querySelector('button');
        var input = document.querySelector('input');
        var span = document.querySelector('span')
        var ul = document.querySelector('ul')
            // var arr = []
        var count = 0
        btn.onclick = function() {
            //1:获取用户输入内容
            var val = input.value;
            var li = document.createElement('li')
            console.log(val);
            //2:将内容添加到ul中
            li.innerHTML = val
            ul.appendChild(li)
            input.value = ''
                // arr.push(val)   //如果打印在控制台的话可以使用这一步将数组打印下来


            count++;
            console.log(count);
            span.innerHTML = '输入的次数为: ' + count  //拼接在原来的内容区内
                // span.appendChild(count)  //覆盖原内容区


        }
         </script>
举报

相关推荐

0 条评论