javascript-排他思想+节点操作

2022/3/20 20:57:32

本文主要是介绍javascript-排他思想+节点操作,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

排他思想

  1. 所有元素全部清除样式
  2. 给当前元素设置样式
  3. 注意顺序,先干掉其他人,再设置自己
 
<script>
        //1.获取所有按钮元素
        var btns = document.getElementsByTagName('button');
        //btns得到的是伪数组 里面的每一个元素 btns[i]
        for (var i = 0; i < btns.length; i++) {
            btns[i].onclick = function () {
                //(1)我们先把所有的按钮颜色去掉
                for (var i = 0; i < btns.length; i++) {
                    btns[i].style.backgroundColor = '';
                }
                //(2)然后让当前的元素背景颜色为pink
                this.style.backgroundColor = 'pink';
            }
        }
    </script>

案列:百度换肤

这个案例练习的是给一组元素注册事件 给4个图片利用循环注册点击事件 当我们点击这个图片,让我们页面背景改为当前的图片 核心算法:把当前这个图片的src路径取过来,给body做背景即可
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        body {
            background: url(images/1.jpg) no-repeat center top;
        }

        li {
            list-style: none;
        }

        .baidu {
            overflow: hidden;
            margin: 100px auto;
            background-color: #fff;
            width: 410px;
            padding-top: 3px;
        }

        .baidu li {
            float: left;
            margin: 0 1px;
            cursor: pointer;
        }

        .baidu img {
            width: 100px;
        }
    </style>
<ul class="baidu">
        <li><img src="images/1.jpg" alt=""></li>
        <li><img src="images/2.jpg" alt=""></li>
        <li><img src="images/3.jpg" alt=""></li>
        <li><img src="images/4.jpg" alt=""></li>
    </ul>
    <script>
        //1.获取元素
        var imgs = document.querySelector('.baidu').querySelectorAll('img');
        //2.循环注册事件
        for (var i = 0; i < imgs.length; i++) {
            imgs[i].onclick = function () {
                //this.src就是我们点击图片的路径,把该路径给body
                document.body.style.backgroundImage = 'url(' + this.src + ')';
            }
        }
    </script>

表单中全选案例

  1. 全选和取消全选做法:让下面所以复选框的checked属性跟随全选按钮即可
  2. 下面复选框需要全部选中,上面的全选才能选中:给下面所以复选框绑定点击事件,每次点击,都要循环查看下面所有的复选框是否有没有没选中的,如果有一个没选中的,上面全选就不选中。
  3. 设置一个变量来控制全选或不全选
<div class="wrap">
        <table>
            <thead>
                <tr>
                    <th>
                        <input type="checkbox" id="j_cbAll">
                    </th>
                    <th>商品</th>
                    <th>价钱</th>
                </tr>
            </thead>
            <tbody id="j_tb">
                <tr>
                    <td>
                        <input type="checkbox">
                    </td>
                    <td>iPhone8</td>
                    <td>8000</td>
                </tr>
                <tr>
                    <td>
                        <input type="checkbox">
                    </td>
                    <td>mac</td>
                    <td>12000</td>
                </tr>
                <tr>
                    <td>
                        <input type="checkbox">
                    </td>
                    <td>watch</td>
                    <td>2000</td>
                </tr>
            </tbody>
        </table>
    </div>
    <script>
        //1.全选取消全选
        //获取元素
        var j_cbAll = document.getElementById('j_cbAll');//全选
        var j_tbs = document.getElementById('j_tb').getElementsByTagName('input');
        //注册事件
        j_cbAll.onclick = function () {
            // this.checked;可以得到当前复选框的选中状态,true选中状态
            for (var i = 0; i < j_tbs.length; i++) {
                j_tbs[i].checked = this.checked;
            }
        }
        //2.下面复选框需要全部选中,上面的全选才能选中:给下面所以复选框绑定点击事件,每次点击,
        //都要循环查看下面所有的复选框是否有没有没选中的,如果有一个没选中的,上面全选就不选中。
        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) {
                        flag = false;
                        break;//退出循环可以提高执行效率

                    }
                }
                j_cbAll.checked = flag;
            }
        }
    </script>

自定义属性操作

获取属性值/设置属性值/移除属性值
<div id="demo" index="1" class="nav"></div>
    <script>
        var div = document.querySelector('div');
        //1.获取元素的属性值
        //(1)element.属性
        console.log(div.id);
        //(2)element.getAttribute('属性') get得到获取attribute 属性的意思 
        //程序自己添加的属性成为自定义属性
        console.log(div.getAttribute('id'));
        console.log(div.getAttribute('index'));
        //2.设置属性值
        //(1)第一种方法
        div.id = 'test';
        div.className = 'navs';
        //(2)针对自定义
        div.setAttribute('index', 2);
        div.setAttribute('class', 'float');//class特殊 不需要弄classname
        //3.移除属性
        div.removeAttribute('index');
    </script>
区别 第一种方法用于获取内置属性值(元素本身自带的属性) 第二种方法主要获得自定义属性  

淘宝切换栏

 
<style>
        * {
            margin: 0;
            padding: 0;
        }

        .tab_list {
            height: 200px;
        }

        .tab_list li {
            float: left;
            height: 39px;
            line-height: 39px;
            padding: 0 20px;
            text-align: center;
            cursor: pointer;
        }

        .tab_list .current {
            background-color: brown;
            color: azure;
        }

        .item_info {
            padding: 20px 0 0 20px;
        }

        .item {
            display: none;
        }
    </style>
<div class="tab">
        <div class="tab_list">
            <ul>
                <li class="current">商品介绍</li>
                <li>规格与包装</li>
                <li>售后保障</li>
                <li>商品评价(5000+)</li>
                <li>手机社区</li>
            </ul>
        </div>
        <div class="tab_con">
            <div class="item" style="display: block;">商品介绍模块内容</div>
            <div class="item">规格与包装模块内容</div>
            <div class="item">售后保障模块内容</div>
            <div class="item">商品评价模块内容</div>
            <div class="item">手机社区模块内容</div>

        </div>
    </div>
    <script>

        var tab_list = document.querySelector('.tab');
        var lis = tab_list.querySelectorAll('li');
        var items = document.querySelectorAll('.item');
        for (var i = 0; i < lis.length; i++) {
            //开始给5个li设置索引号
            lis[i].setAttribute('index', i);
            lis[i].onclick = function () {
                //1.排他思想
                for (var i = 0; i < lis.length; i++) {
                    lis[i].className = '';
                }
                this.className = 'current';
                var index = this.getAttribute('index');
                for (var i = 0; i < items.length; i++) {
                    items[i].style.display = 'none';
                }
                //干掉所有人 让其余div隐藏
                items[index].style.display = 'block';

            }
        }
    </script>

H5自定义属性

目的:为了保存并使用数据 ,有些数据可以保存到页面中而不用保存到数据库中 自定义属性获取通过getAttribute(‘属性’)获取。 但是有些自定义属性很容易引起歧义,不容易判断是元素的内置属性还是自定义属性

1.设置H5自定义属性

H5规定自定义属性data-开头作为属性名并赋值
<div getTime="20" data-index="2" data-list-name="ame"></div>
    <script>
        var div = document.querySelector('div');
        console.log(div.getAttribute('getTime'));
        div.setAttribute('data-time', 20);
        console.log(div.getAttribute('data-index'));
        //dataset   是一个集合里面存放了所有以data开头的自定义属性
        console.log(div.dataset);
        console.log(div.dataset.index);
        console.log(div.dataset['index']);
        //如果自定义属性里面有多个-连接的词,我们获取的时候采取驼峰命名法
        console.log(div.dataset.listName);
    </script>

节点操作

<ol>
        <li>no.1</li>
        <li>no.2</li>
        <li>no.3</li>
        <li>no.4</li>
    </ol>
    <script>
        var ol = document.querySelector('ol');
        //1.firstChild第一个子节点 不管是文本节点还是元素节点
        console.log(ol.firstChild);
        console.log(ol.lastChild);
        //2.兼容性问题
        console.log(ol.firstElementChild);
        console.log(ol.lastElementChild);
        //3.实际开发用法
        console.log(ol.children[0]);
        console.log(ol.children[ol.children.length - 1]);
    </script>

创建节点增加节点

<ul>123</ul>
    <script>
        //1.创建节点元素节点
        var li = document.createElement('li');
        //2.添加节点 node.appendChild(child) node父级 child是子集 后面追加元素
        var ul = document.querySelector('ul');
        ul.appendChild(li);
        //3.添加节点
        var lili = document.createElement('li');
        ul.insertBefore(lili, ul.children[0]);
    </script>

发布留言案例

<textarea name="" id="">123</textarea>
    <button>发布</button>
    <ul>
    </ul>
    <script>
        //1。获取元素
        var btn = document.querySelector('button');
        var text = document.querySelector('textarea');
        var ul = document.querySelector('ul');
        //2.注册事件
        btn.onclick = function () {
            if (text.value == '') {
                alert('您没有输入内容');
                return false;

            } else {
                //1.创建元素
                var li = document.createElement('li');
                li.innerHTML = text.value;
                //2.添加元素
                // ul.appendChild(li);
                ul.insertBefore(li, ul.children[0]);
            }
        }
    </script>

 



这篇关于javascript-排他思想+节点操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程