JavaScript-0816

元素内容操作

1、语法

1、dom对象.innerHTML
2、dom对象.innerText
3、dom对象.value
上面三个全部都是属性,并且使用形式一致 直接调用属性 表示将值取出,如果给属性赋值 表示修改元素的内容

2、获取、设置元素内容

<div class="message">
        <strong>一心只蹦黄泉迪</strong>    
    </div>
    <input type="text" class="nickname" value="唢呐">
    <button class="get">获取</button>
    <button class="set">设置</button>
    <script>
        var messageDom = document.querySelector('.message');
        document.querySelector('.get').onclick = function(){
            // 1、innerHTML是针对双标签使用
            // 2、value是针对表单元素使用
            // 3、innerText 只处理内容 涉及标签 忽略
            console.log(messageDom.innerHTML);
            console.log(messageDom.innerText)
            console.log(document.querySelector('.nickname').value);
        }
        document.querySelector('.set').onclick = function(){
            // document.querySelector('.nickname').value = 'set'
            // messageDom.innerHTML = '<p>两耳不闻棺外事</p>';
            // 不能解析标签。所有的内容都只是内容而已
            messageDom.innerText = '<p>两耳不闻棺外事</p>';
        }
    </script>

元素属性操作

通过使用js代码控制到每一个标签元素上属性,例如class、name、id等

调用方法控制

1、语法

1、获取属性:dom对象.getAttribute(属性名称)
2、设置属性:dom对象.setAttribute(属性名称,属性值)
3、删除属性:dom对象.removeAttribute(属性名称)

2、使用示例

<!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>
    <!-- 
        标签上可以设置自定义属性 需要以data-开头  后面的名称叫什么任意
        自定义属性 是为了后期使用 先存储部分值
    -->
    <font size="5" color="red" data-index="1">aaaaaa</font>
    <input type="checkbox" value="" checked>
    <button>获取</button>
    <button>修改</button>
    <button>删除</button>
    <script>
        var btns = document.querySelectorAll('button');
        var fontDom = document.querySelector('font');
        btns[0].onclick = function(){
            console.log(fontDom.getAttribute('color'));
            console.log(fontDom.getAttribute('data-index'));
            // 针对于布尔属性(checked,slected,disabled)操作值是存在问题的
            console.log(document.querySelector('input').getAttribute('checked'))
        }
        btns[1].onclick = function(){
            // 设置方法 如果标签上存在属性 就修改 否则就添加
            fontDom.setAttribute('size',2);
            fontDom.setAttribute('data-index',3);
            fontDom.setAttribute('id','f');
            // 针对于布尔属性(checked,slected,disabled)操作值是存在问题的
            document.querySelector('input').setAttribute('checked',false);
        }
        btns[2].onclick = function(){
            fontDom.removeAttribute('color')
        }
    </script>
</body>
</html>

调用属性控制

1、语法

dom对象.属性名称
属性名称 表示需要控制到的标签上属性。要求是标签自带的属性才可以

直接调用属性表示获取,属性赋值 表示设置, 如果想要实现删除效果 赋值为空字符串即可

2、使用示例

<!-- 
        标签上可以设置自定义属性 需要以data-开头  后面的名称叫什么任意
        自定义属性 是为了后期使用 先存储部分值
    -->
    <font size="5" color="red" data-index="1" class="ft">aaaaaa</font>
    <input type="checkbox" value="" checked>
    <button>获取</button>
    <button>修改</button>
    <button>删除</button>
    <script>
        var btns = document.querySelectorAll('button');
        var fontDom = document.querySelector('font');
        btns[0].onclick = function(){
            // color 就是标签上属性名字
            console.log(fontDom.color);
            // 自定义的方式是无法实现
            console.log(fontDom["data-index"]);
            // 正常 所以以后涉及布尔属性 使用dom对象.属性名称
            console.log(document.querySelector('input').checked)
            // 需要使用到class属性的值时 需要使用className这个词(class是关键字)
            console.log(fontDom.className);
        }
        btns[1].onclick = function(){
            fontDom.size = 2;
            // 这句话向增加自定义属性,但是不支持,虽然不支持但是也没有导致语法错误,因为目前这句话是向dom对象下添加属性。如果使用非dom对象 调用dom下的方法 绝对会报错
            fontDom.dataIndex = 2;
            document.querySelector('input').checked = false;
            // 修改class
            fontDom.className = 'a b'
        }
        btns[2].onclick = function(){
            fontDom.className = '';
        }
    </script>

总结:布尔属性 就通过dom对象调用属性方式控制,其他的推荐使用方法控制

tab选项卡案例

<!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>
        .container {
            width: 600px;
            height: 400px;
            border: 10px solid #333;
            margin: 30px auto;
            display: flex;
            flex-direction: column;
        }

        .header {
            height: 40px;
            display: flex;
            line-height: 40px;
        }

        .header div {
            flex: 1;
            background-color: hotpink;
            text-align: center;
            font-size: 36px;
            color: white;
        }

        .header .active {
            background-color: orange;
        }

        .content {
            display: none;
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="header">
            <div class="active">热卖</div>
            <div>精品</div>
            <div>推荐</div>
        </div>
        <div class="body">
            <div class="content" style="display: block;">1</div>
            <div class="content">2</div>
            <div class="content">3</div>
        </div>

    </div>
</body>

</html>
<script>
    /*
        思路:
            为class为header下的每一个div都需要绑定点击事件
                1、一旦用户点击。已有的active样式的元素移除样式, 将点击的div标签添加active样式 
                2、将点击对应的内容显示 其他的隐藏
    */
    var headerDivDom = document.querySelectorAll('.header>div');

    var contentsDom = document.querySelectorAll('.body>.content');

    for (var i = 0; i < headerDivDom.length; i++) {
        // 在每一个标签上记录下 序号(因为在处理内容显示时需要知道当前点击的序号是多少)
        headerDivDom[i].setAttribute('data-index', i);
        headerDivDom[i].onclick = function () {
            // 将已有active的标签的样式移除
            document.querySelector('.active').removeAttribute('class');
            // 当前点击的添加active
            // this 表示当前事件源的dom对象
            this.className = 'active';
            // 排他思想 不论是谁在显示,将所有content 全部隐藏,再将点击对应的content进行显示
            for (var j = 0; j < contentsDom.length; j++) {
                contentsDom[j].style.display = 'none';
            }

            console.log(i);
            // 因为现在需要知道 当前点击的div是第几个才可以确定 哪一个对应的内容需要显示
            var index = this.getAttribute('data-index');
            contentsDom[index].style.display = 'block';
        }
    }
    // 只要得到的是dom对象 就可以继续调用querySelector 进行筛选
    // var dom = document.querySelector('.header')
    // console.log(dom.querySelector('.content'))
</script>

样式操作

获取样式

1、获取行内样式

<!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>
        div{width: 200px; height: 100px; background-color: red;}
    </style>
</head>
<body>
    <!-- 虽然标签上可以使用style属性控制样式,但是在设置样式 千万别用属性操作控制样式 -->
    <div style="width: 100px;"></div>
    <script>
        // 获取样式永远是获取到生效了的样式,一些被覆盖的样式 没有任何意义
        var divDom = document.querySelector('div');
        // 1、dom对象.style.样式名称 此方式只能取到行内样式
        console.log(divDom.style.width);
        // 样式名称如果存在-去掉并且替换成驼峰式background-color=》backgroundColor
        console.log(divDom.style.backgroundColor);//内嵌的样式 无法通过这种方式获取到的
    </script>
</body>
</html>

2、使用内置getComputedStyle

// 2、使用window.getComputedStyle(dom对象)  返回结果是目前生效的样式组成的一个对象
console.log(window.getComputedStyle(divDom));
console.log(window.getComputedStyle(divDom).backgroundColor);

3、IE低版本的兼容性问题

// 3、IE低版本 可以使用currentStyle完成
console.log(divDom.currentStyle.backgroundColor);

4、封装公共函数获取样式

/**
 * 获取元素的样式
 * @param {Element} elem  需要获取样式元素的DOM对象
 * @param {String} attr 需要获取的样式名称
 */
function getStyle(elem,attr){
    if(window.getComputedStyle){
        // 证明 window对象下存在 getComputedStyle属性的(方法) 所以就是满足w3c标准的浏览器
        // 因为attr 是变量  window.getComputedStyle(elem)的到的是对象 所以 需要使用数组语法
        return window.getComputedStyle(elem)[attr];
    }
    // 代码执行到这一行 绝对证明 是IE的低版本
    return elem.currentStyle[attr];
}

设置样式

1、语法

dom对象.style.样式名称 = 值
设置样式永远设置到行内

2、设置样式

<div></div>
    <script>
        document.querySelector('div').style.width = '100px';
        document.querySelector('div').style.height = '100px';
        document.querySelector('div').style.backgroundColor = 'red';
    </script>

进度条案例

DOM节点操作

dom节点介绍

节点类型

节点属性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

goto_w

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值