前端学习笔记-Day2

一、元素排他思想算法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <button>按钮1</button>    
    <button>按钮2</button>   
    <button>按钮3</button>   
    <button>按钮4</button>   
    <button>按钮5</button>   

    <script>
        // 获取所有按钮元素

        // 根据标签名获取元素
        var btns = document.getElementsByTagName('button');
        
        // BTN获得是数组

        for(var i = 0; i < btns.length; i++)
        {
            btns[i].onclick = function(){
                // 首先将所有的按钮背景颜色去掉
                for(var j = 0; j < btns.length; j++)
                {
                    btns[j].style.backgroundColor = '';
                }
                // 然后才让当前的元素背景颜色变为Pink
                this.style.backgroundColor = 'pink';
            }
        }
    </script>
</body>
</html>

  • 所有元素全部清除样式
  • 给当前元素设置样式
  • 顺序不可以颠倒

二、案例分析-更换背景图片

  • 给四个图片利用循环注册点击事件
  • 当我们点击图片之后,页面背景改为当前的图片
  • 核心思想:将当前图片的src路径取出来,给Body作为背景
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <ul>
        <li><img src = "images/ldh.jpg"></li>
        <li><img src = "images/wrong.jpg"></li>
    </ul>

    <script>
        // 获取元素

        // 现根据类名 获取元素 再根据标签名获取元素
        var imgs = document.querySelector('.baidu').querySelector('img');

        // 循环注册事件
        for(var i = 0; i < imgs.length; i++)
        {
            imgs[i].onclick = function(){
                // 改变Body标签的背景图片
                document.body.style.backgroundImage = 'url(' + this.src + ')';
            }
        }
    </script>
    
</body>
</html>

三、案例分析-表格颜色

  • 鼠标事件:鼠标经过onmouseover 鼠标离开onmouseout
  • 核心思路:鼠标经过tr行 当前行的变背景颜色 鼠标离开去掉当前的背景颜色
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
        .bg{
            background-color: pink;
        }

    </style>

</head>
<body>
    <table>
        <thead>
            <tr>
                <th>代码</th>
                <th>名称</th>
                <th>最新公布净值</th>
                <th>累计净值</th>
                <th>前单位净值</th>
                <th>净值增长率</th>
            </tr>
        </thead>

        <tbody>
            <tr>
                <td>003526</td>
                <td>xxxxxx</td>
                <td>1.1111</td>
                <td>1.2121</td>
                <td>1.3221</td>
                <td>003526</td>
            </tr>
        </tbody>
    </table>


    <script>
        // 获取元素 获取的是tbody里面的所有的行
        var trs = document.querySelector('tbody').querySelectorAll('tr');

        // 利用循环绑定注册事件

        for(var i = 0; i < trs.length; i++)
        {
            // 鼠标经过注册事件
            trs[i].onmouseover = function(){
                this.className = 'bg';// 直接通过类名更改样式
            }

            trs[i].onmouseout = function(){
                this.className = '';// 不添加样式
            }
        }
    </script>
    
</body>
</html>

四、案例分析-全选

在这里插入图片描述

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
  
    <script>
       // 全选和取消全选  让下面所有复选框的checked属性跟随全选按钮
       
       // 获取元素
        // 获取全选按钮
       var j_cbAll = document.getElementById('j_cbAll');
       
       // 获取所有单选框
       var j_tbs = document.getElementById('j_tb').getElementsByTagName('input');

       // 全选按钮注册事件

       j_cbAll.onclick = function(){
        // checked属性查看复选框的选中状态
        for(var i = 0; i < j_tbs.length; i++)
        {
            // 所有单选框的状态随着复选框状态变化
            j_tbs[i].checked = this.checked;
        }
       }

       for(var i = 0; i < j_tbs.length; i++)
       {
         j_tbs[i].onclick = function(){
            // flag 控制全选按钮是否选中

            var flag = true;

            // 每次点击下面的复选框都要循环检查 四个小按钮是否被选中
            for(var i = 0; i < j_tbs.length; i++)
            {
                if(j_tbs[i].checked == false)
                {
                    flag = false;
                    break;
                }
            }
            j_cbAll.checked = flag;
         }
       }
    </script>
</body>
</html>

五、自定义属性

在这里插入图片描述
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id = "demo" index = "1" class = "nav"></div>
    <script>
        var div = document.querySelector('div');

        // element.属性
        console.log(div.id);

        //element.getAttribute('属性') 
        console.log(div.getAttribute('id'));
        console.log(div.getAttribute('index'));

        // 设置属性值
        div.id = 'test';
        div.className = 'navs';

        // 针对自定义属性
        div.setAttribute('index',2);
        div.setAttribute('class','footer');

        // 移除属性
        div.removeAttribute('index');

    </script>
</body>
</html>

六、H5自定义属性

自定义属性目的:是为了保存并使用数据。有些数据可以保存到页面中而不用保存到数据库中。

自定义属性获取是通过getAttribute(‘属性’) 获取。

但是有些自定义属性很容易引起歧义,不容易判断是元素的内置属性还是自定义属性。

H5给我们新增了自定义属性:

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div getTime = "20" data-index = "2" data-list-name = "andy"></div>

    <script>
        var div = document.querySelector('div');

        console.log(div.getAttribute('getTime'));

        // 设置自定义属性
        div.setAttribute('data-time',20);


        console.log(div.getAttribute('data-list-name'));


        // h5新增的获取自定义属性的方法
        // dataset是一个集合里面存放所有data的自定义属性

        console.log(div.dataset);
        console.log(div.dataset.index);
        console.log(div.dataset['index']);


        // 如果自定义属性有多个连接的单词 使用驼峰命名
        console.log(div.dataset.listName);
        console.log(div.dataset['listName']);
    </script>
</body>
</html>

七、利用节点操作属性

在这里插入图片描述

7.1 节点概述

 网页中的所有内容都是节点(标签、属性、文本、注释)在DOM中节点使用Node来表示,

在这里插入图片描述

 节点至少拥有nodeType(节点类型)、nodeName(节点名称)和nodeValue(节点值)三个基本属性

在这里插入图片描述

7.1 父节点parentNode

寻找该节点的父节点,找不到返回null

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 节点 -->
    <div>
        我是div
    </div>
    <span>我是span</span>

    <ul>
        <li>我是Li</li>
        <li>我是Li</li>
        <li>我是Li</li>
        <li>我是Li</li>
        <li>我是Li</li>
    </ul>

    <div class = "box">
        <span class = "erweima">x</span>
    </div>

    <script>
        var box = document.querySelector('.box');
        var e = document.querySelector('.erweima');
        console.log(e.parentNode);// 获取父节点 box
    </script>
</body>
</html>

7.2 childNodes 所有子节点

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 节点 -->
    <div>
        我是div
    </div>
    <span>我是span</span>

    <ul>
        <li>我是Li</li>
        <li>我是Li</li>
        <li>我是Li</li>
        <li>我是Li</li>
        <li>我是Li</li>
    </ul>

    <div class = "box">
        <span class = "erweima">x</span>
    </div>

    <script>
        var box = document.querySelector('.box');
        var e = document.querySelector('.erweima');
        console.log(e.parentNode);// 获取父节点 box

        // 原始的获取所有子节点方法
        var ul = document.querySelector('ul');
        var lis = ul.querySelectorAll('li');// 返回子节点集合

        // 子节点
        console.log(ul.childNodes);// 获取所有子节点
    </script>
</body>
</html>

注意:childNodes返回值包含了所有的子节点 元素节点 文本节点,需要进行筛选

for(var i = 0; i < ul.childNodes.length; i++)
        {
            if(ul.childNodes[i].nodeType == 1)
            {
                // 如果是元素节点 不是文本节点  打印
                console.log(ul.childNodes[i]);
            }
        }

使用children获取所有的子元素节点 实际开发常用的

console.log(ul.children);

7.3 子节点

这两个方法 很可能获取的是文本节点
在这里插入图片描述

获取第一个子元素节点
在这里插入图片描述

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 节点 -->
    <div>
        我是div
    </div>
    <span>我是span</span>

    <ul>
        <li>我是Li</li>
        <li>我是Li</li>
        <li>我是Li</li>
        <li>我是Li</li>
        <li>我是Li</li>
    </ul>

    <div class = "box">
        <span class = "erweima">x</span>
    </div>

    <script>
       var ol = document.querySelector('ol');

       // 获取第一个元素节点 或者是文本节点
       console.log(ol.firstChild);
       console.log(ol.lastChild);

       // 返回第一个子元素节点
       console.log(ol.firstElementChild);
       console.log(ol.lastElementChild);// 获取最后一个子元素节点


       // 或者写成  使用children 获取所有元素节点   排除文本节点
       console.log(ol.children[0]);// 第一个子元素节点
       console.log(ol.children[ol.children.length - 1]);// 获取最后一个子元素节点
        
    </script>


</body>
</html>

7.4 兄弟节点

在这里插入图片描述

在这里插入图片描述

 function getNextElementSibling(element)
       {
         var el = element;
         while(el = el.nextSibling)
         {
            if(el.nodeType === 1)
            {
                return el;//寻找元素节点
            }

         }

        return null;
       }



7.5 创建节点

在这里插入图片描述

创建节点之后需要添加节点
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 节点 -->
    <ul>
        <li>
            123
        </li>

    </ul>
    
    <script>
       // 创建节点元素
       var li = document.createElement('li');

       // 添加节点 
       // 先获取ul元素对象
       var ul = document.querySelector('ul');
       ul.appendChild(li);// 添加元素节点到末尾
       
    </script>
</body>
</html>

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 节点 -->
    <ul>
        <li>
            123
        </li>

    </ul>
    <script>
       // 创建节点元素
       var li = document.createElement('li');

       // 添加节点 
       // 先获取ul元素对象
       var ul = document.querySelector('ul');
       ul.appendChild(li);// 添加元素节点到末尾

       // 在指定节点前面插入节点
       var lili = document.createElement('li');

       // 在第一个孩子节点前面插入节点
       ul.insertBefore(lili,ul.children[0]);
    </script>
</body>
</html>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少写代码少看论文多多睡觉

求打赏,求关注,求点赞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值