0164 DOM 之 自定义属性操作:获取属性值,设置属性值,删除属性, tab 栏案例,H5自定义属性

1.5.1 获取属性值

element.属性:获取属性值。 
element.getAttribute('属性');
区别: 
element.属性 获取内置属性值(元素本身自带的属性) 
element.getAttribute(‘属性’); 主要获得自定义的属性 (标准) 我们程序员自定义的属性

    <div id="demo" index="1" class="nav"></div>
    <script>
        var div = document.querySelector('div');
        // 1. 获取元素的属性值
        // (1) element.属性
        console.log(div.id);
	console.log(div.index); // undefined
        //(2) element.getAttribute('属性')  get得到获取 attribute 属性的意思 我们程序员自己添加的属性我们称为自定义属性 index
        console.log(div.getAttribute('id')); // demo
        console.log(div.getAttribute('index')); // 1
        console.log(div.getAttribute('class')); // nav
	</script>

1.5.2 设置属性值

 element.属性 = ‘值’:设置内置属性值。
 element.setAttribute('属性', '值');
区别:
 element.属性 设置内置属性值
 element.setAttribute(‘属性’); 主要设置自定义的属性 (标准)

        // 2. 设置元素属性值
        // (1) element.属性= '值'
        div.id = 'test';
        div.className = 'navs';
        // (2) element.setAttribute('属性', '值');  主要针对于自定义属性
        div.setAttribute('index', 2);
        div.setAttribute('class', 'footer'); // class 特殊  这里面写的就是

1.5.3 删除属性

1550915513137

	// class 不是className
        // 3 移除属性 removeAttribute(属性)    
        div.removeAttribute('index');
    <div id="demo" index="1" class="nav"></div>
    <script>
        var div = document.querySelector('div');
        // 1. 获取元素的属性值
        // (1) element.属性
        console.log(div.id);
        console.log(div.className); // nav
        console.log(div.class); // undefined,这里要用className

        //(2) element.getAttribute('属性')  get得到获取 attribute 属性的意思 我们程序员自己添加的属性我们称为自定义属性 index
        console.log(div.getAttribute('id'));
        console.log(div.getAttribute('index'));


        // 2. 设置元素属性值
        // (1) element.属性= '值'
        div.id = 'test';
        div.className = 'navs';

        // (2) element.setAttribute('属性', '值');  主要针对于自定义属性
        div.setAttribute('index', 2);
        div.setAttribute('class', 'footer'); // class 特殊  这里面写的就是class 不是className

        // 3.移除属性 removeAttribute(属性)    
        div.removeAttribute('index');
    </script>

1.5.4. 案例:tab栏

<!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>
        * {
            margin: 0;
            padding: 0;
        }
        
        li {
            list-style-type: none;
        }
        
        .tab {
            width: 978px;
            margin: 100px auto;
        }
        
        .tab_list {
            height: 39px;
            border: 1px solid #ccc;
            background-color: #f1f1f1;
        }
        
        .tab_list li {
            float: left;
            height: 39px;
            line-height: 39px;
            padding: 0 20px;
            text-align: center;
            cursor: pointer;
        }
        
        .tab_list .current {
            background-color: #c81623;
            color: #fff;
        }
        
        .item_info {
            padding: 20px 0 0 20px;
        }
        
        .item {
            display: none;
            height: 80px;
            font-size: 30px;
            line-height: 80px;
            text-align: center;
            color: orangered;
        }
        
        .item:nth-child(2n) {
            background-color: pink;
        }
        
        .item:nth-child(2n+1) {
            background-color: lightcyan;
        }
    </style>
</head>

<body>
    <div class="tab">
        <div class="tab_list">
            <ul>
                <li class="current">商品介绍</li>
                <li>规格与包装</li>
                <li>售后保障</li>
                <li>商品评价(50000)</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">
                商品评价(50000)模块内容
            </div>
            <div class="item">
                手机社区模块内容
            </div>

        </div>
    </div>
    <script>
        // 获取元素
        var tab_list = document.querySelector('.tab_list');
        var lis = tab_list.querySelectorAll('li');
        var items = document.querySelectorAll('.item');
        // for循环绑定点击事件
        for (var i = 0; i < lis.length; i++) {
            lis[i].setAttribute('index', i); // 开始给5个小li 设置索引号 

            lis[i].onclick = function() {
                // 1. 上的模块选项卡,点击某一个,当前这一个底色会是红色,其余不变(排他思想) 修改类名的方式
                // 干掉所有人 其余的li清除 class 这个类
                for (var i = 0; i < lis.length; i++) {
                    lis[i].className = '';
                }
                this.className = 'current'; // 留下我自己 

                // 2. 下面的显示内容模块
                var index = this.getAttribute('index');
                console.log(index);
                // 干掉所有人 让其余的item 这些div 隐藏
                for (var i = 0; i < items.length; i++) {
                    items[i].style.display = 'none';
                }

                items[index].style.display = 'block'; // 留下我自己 让对应的item 显示出来
            }
        }

        // 优化1:使用let
        for (let i = 0; i < lis.length; i++) {
            lis[i].onclick = function() {
                for (var j = 0; j < lis.length; j++) {
                    lis[j].className = '';
                }
                this.className = 'current';

                for (var k = 0; k < items.length; k++) {
                    items[k].style.display = 'none';
                }
                items[i].style.display = 'block';
            }
        }

        // 进一步优化
        for (let i = 0; i < lis.length; i++) {
            lis[i].onclick = function() {
                for (let j = 0; j < lis.length; j++) {
                    lis[j].className = ''
                    items[j].style.display = 'none'
                }
                this.className = 'current'
                items[i].style.display = 'block'
            }
        }
    </script>
</body>

</html>

1.5.5 H5自定义属性

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

自定义属性获取:可以通过 getAttribute(‘属性’) 获取 。

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

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

1、设置H5自定义属性

(1)H5规定自定义属性data-开头做为属性名并且赋值。

比如 :

(2)使用 JS 设置

比如:element.setAttribute(‘data-index’, 2)


2、获取H5自定义属性
(1)兼容性获取: element.getAttribute(‘data-index’);
(2)H5新增: element.dataset.index 或者 element.dataset[‘index’], ie 11才开始支持

dataset 是一个集合【字面量对象】,里面存放了所有以data开头的自定义属性。

    <div getTime="20" data-index="2" data-list-name="andy"></div>
    <script>
        var div = document.querySelector('div');
        // console.log(div.getTime);
        console.log(div.getAttribute('getTime'));
        div.setAttribute('data-time', 20);
        console.log(div.getAttribute('data-index'));
        console.log(div.getAttribute('data-list-name'));
        // h5新增的获取自定义属性的方法 它只能获取data-开头的
        // 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>

posted on 2020-01-09 11:24  冲啊!  阅读(560)  评论(0编辑  收藏  举报

导航