DOM属性和样式的操作

一、innerHTML和innerText

  • 节点.innerHTML:双闭合标签里面的内容(包含标签)
  • 节点. innerText:不包含标签,只有文字
  • 节点.value:标签的value

二、nodeType属性:节点类型

这里讲一下nodeType属性。

nodeType == 1 表示的是元素节点(标签) 。记住:在这里,元素就是标签。
nodeType == 2 表示是属性节点。
nodeType == 3 是文本节点。

三、nodeType,nodeName,nodeValue

<div id="box" value="111">
    生命壹号
</div>

上面这个标签就包含了三种节点:

元素节点(标签)
属性节点
文本节点

    var element = document.getElementById("box1");  //获取元素节点(标签)
    var attribute = element.getAttributeNode("id"); //获取box1的属性节点
    var txt = element.firstChild;                   //获取box1的文本节点

    //获取nodeType
    console.log(element.nodeType);       //1
    console.log(attribute.nodeType);     //2
    console.log(txt.nodeType);           //3

    console.log("--------------");

    //获取nodeName
    console.log(element.nodeName);       //DIV
    console.log(attribute.nodeName);     //id
    console.log(txt.nodeName);           //#text
    console.log("--------------");
    //获取nodeValue
    console.log(element.nodeValue);     //null
    console.log(attribute.nodeValue);   //box1
    console.log(txt.nodeValue);         //生命壹号

四、文档加载

  • 浏览器在加载一个页面时,是按照自上向下的顺序加载的,读取到一行就运行一行。如果将script标签写到页面的上边,在代码执行时,页面还没有加载,页面没有加载DOM对象也没有加载,会导致无法获取到DOM对象。
  • onload 事件:

onload 事件会在整个页面加载完成之后才触发。为 window 绑定一个onload事件,该事件对应的响应函数将会在页面加载完成之后执行,这样可以确保我们的代码执行时所有的DOM对象已经加载完毕了。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title></title>
    <script type="text/javascript">
      // 【方式一:先加载,后执行】这段 js 代码是写在 <head> 标签里的,所以建议放在 window.onload 里面。
      window.onload = function() {
        // 获取id为btn的按钮
        var btn = document.getElementById("btn");
       // 为按钮绑定点击事件
        btn.onclick = function() {
          alert("hello");
        };
      };
    </script>
  </head>
 <body>
    <button id="btn">点我一下</button>
    <script type="text/javascript">

      // 【方式二:后加载,后执行】这段 js 代码是写在 <body> 标签里的,代码的位置是处在页面的下方。这么做,也可以确保:在页面加载完毕后,再执行 js 代码。
      // 获取id为btn的按钮
      var btn = document.getElementById("btn");
      // 为按钮绑定点击事件
      btn.onclick = function() {
        alert("hello");
      };
    </script>
  </body>
</html>
>HTML DOM允许JavaScript改变HTML元素的样式
    在DOM中华,如果设置样式,有两种形式
clss属性是js中式className增加标签的类选择器名字

五、行内样式设置

  • style是一个对象,只能获取行内样式,不能获取内嵌的样式和外链的样式
  • 语法

元素.style.样式名=样式值;
box1.style.width = “300px”;
box1.style.backgroundColor = “red”; // 驼峰命名法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div {
            border: 6px solid red;
        }
    </style>
</head>
<body>
    <div class="box1" style="width: 200px;height: 100px;background-color: pink;"></div>
    <script>
        var box1 = document.getElementsByTagName("div")[0];
        console.log(box1.style.backgroundColor);
        console.log(box1.style.border);  //没有打印结果,因为这个属性不是行内样式
        console.log(typeof box1.style);  //因为是对象,所以打印结果是Object
        console.log(box1.style);         //打印结果是对象
    </script>
</body>
</html>

在这里插入图片描述

  • 因为border属性不是行内样式,所以无法通过style对象获取。
  • 备注:我们通过style属性设置的样式都是行内样式,而行内样式有较高的优先级。但是如果在样式中的其他地方写了!important,则此时!important会有更高的优先级。

六、读取元素的样式

  • 语法

方式一:元素.style.样式名;
方式二:元素.style[“属性”]; box.style[“width”]; //举例
方式二最大的优点是:可以给属性传递参数。

七、style属性的注意事项

  • style属性需要注意一下
    (1)、样式少的时候使用
    (2)、style是对象。typeof的结果是Object
    (3)、值是字符串,没有设置值是""
    (4)、命名规则,驼峰命名
    (5)、只能获取行内样式,和内嵌和外链无关
    (6)、box.style.cssText=“字符串形式的样式”;
  <script>
        var box1 = document.getElementsByTagName("div")[0];
        //通过cssText一次性设置行内样式
        box1.style.cssText = "width: 300px;height: 300px;background-color: green;";
        console.log(box1.style.cssText);   //这一行更加可以理解,style是对象
    </script>

八、style的常用属性

style的常用属性包括

  • backgroundColor
  • backgroundImage
  • color
  • width
  • height
  • border
  • opacity(设置透明度)
    注意DOM对象style的属性和标签中style内的值不一样,因为在JS中,-不能作为标识符。比如:

DOM中:backgroundColor
CSS中:background-color

九、例子

9.1、改变div的大小和透明度
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div {
            border: 6px solid red;
        }
    </style>
</head>
<body>

<div class="box1" style="width: 200px;height: 100px;background-color: pink;"></div>

<script>
  var div=document.getElementsByTagName('div')[0];
  div.onclick=function () {
         div.style.width='400px';
         div.style.height='400px';
         div.style.backgroundColor='blue';
         div.style.opacity='0.6';
  }
</script>
</body>
</html>

在这里插入图片描述

9.2、当前输入的文本框高亮显示
  • 代码
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        input {
            display: block;
        }
    </style>

</head>

<body>
<ul>
    <input type="text"/>
    <input type="text"/>
    <input type="text"/>
    <input type="text"/>
    <input type="text"/>
</ul>
<script>
    //需求:让所有的input标签获取焦点后高亮显示

    //1.获取事件源
    var inpArr = document.getElementsByTagName("input");
    //2.绑定事件
    //3.书写事件驱动程序
    for (var i = 0; i < inpArr.length; i++) {
        //获取焦点后,所有的input标签被绑定onfocus事件
        inpArr[i].onfocus = function () {
            this.style.border = "2px solid red";
            this.style.backgroundColor = "#ccc";
        }
        //绑定onblur事件,取消样式
        inpArr[i].onblur = function () {
            this.style.border = "";
            this.style.backgroundColor = "";
        }
    }
</script>
</body>
</html>

在这里插入图片描述

9.3、高级隔行变色,高亮显示
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        * {
            padding: 0;
            margin: 0;
            text-align: center;
        }

        .wrap {
            width: 500px;
            margin: 100px auto 0;
        }

        table {
            border-collapse: collapse;
            border-spacing: 0;
            border: 1px solid #c0c0c0;
            width: 500px;
        }

        th,
        td {
            border: 1px solid #d0d0d0;
            color: #404060;
            padding: 10px;
        }

        th {
            background-color: #09c;
            font: bold 16px "微软雅黑";
            color: #fff;
        }

        td {
            font: 14px "微软雅黑";
        }

        tbody tr {
            background-color: #f0f0f0;
            cursor: pointer;
        }

        .current {
            background-color: red !important;
        }
    </style>
</head>
<body>
<div class="wrap">
    <table>
        <thead>
        <tr>
            <th>序号</th>
            <th>姓名</th>
            <th>课程</th>
            <th>成绩</th>
        </tr>
        </thead>
        <tbody id="target">
        <tr>
            <td>
                1
            </td>
            <td>生命壹号</td>
            <td>语文</td>
            <td>100</td>

        </tr>
        <tr>
            <td>
                2
            </td>
            <td>生命贰号</td>
            <td>日语</td>
            <td>99</td>
        </tr>
        <tr>
            <td>
                3
            </td>
            <td>生命叁号</td>
            <td>营销学</td>
            <td>98</td>
        </tr>
        <tr>
            <td>
                4
            </td>
            <td>生命伍号</td>
            <td>数学</td>
            <td>90</td>
        </tr>
        <tr>
            <td>
                5
            </td>
            <td>许嵩</td>
            <td>英语</td>
            <td>96</td>
        </tr>
        <tr>
            <td>
                6
            </td>
            <td>vae</td>
            <td>体育</td>
            <td>90</td>
        </tr>
        </tbody>
    </table>
</div>

<script>
    //需求:让tr各行变色,鼠标放入tr中,高亮显示。

    //1.隔行变色。
    var tbody = document.getElementById("target");
    var trArr = tbody.children;
    //循环判断并各行赋值属性(背景色)
    for (var i = 0; i < trArr.length; i++) {
        if (i % 2 !== 0) {
            trArr[i].style.backgroundColor = "#a3a3a3";
        } else {
            trArr[i].style.backgroundColor = "#ccc";
        }

        //鼠标进入高亮显示
        //难点:鼠标移开的时候要回复原始颜色。
        //计数器(进入tr之后,立刻记录颜色,然后移开的时候使用记录好的颜色)
        var myColor = "";
        trArr[i].onmouseover = function () {
            //赋值颜色之前,先记录颜色
            myColor = this.style.backgroundColor;
            this.style.backgroundColor = "#fff";
        }
        trArr[i].onmouseout = function () {
            this.style.backgroundColor = myColor;
        }
    }
</script>
</body>
</html>

在这里插入图片描述

十、通过js获取当前显示的样式

  • 通过currentStyle和getComputedStyle()读取到的样式都是只读的,不能修改,如果要修改必须通过style属性。
  • (1)、内联样式获取如上
  • (2)、内部样式的获取currentStyle
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div{
            width: 100px;
            height: 100px;
            border: 1px solid #000;
            background: pink;
        }
    </style>
</head>
<body>
        <div></div>
        <script>
            var a=document.getElementsByTagName('div')[0];
            var astyle=getComputedStyle(a);
            console.log(astyle.width);//100px
console.log(astyle["width"]);
        </script>
</body>
</html>

—另外

let element = document.getElementById('ele');
let style = window.getComputedStyle(element);//元素样式改变时会自动更新
let display = style.display;//元素指定样式属性的值
  • currentStyle对象返回所有样式i,但是只有IE和Opera支持使用CurrentStyle获取的元素计算后的样式。
    getComputeStyle()方法可以获取当前元素所使用的css属性值。
    ·* getComputeStyle()是只读,只能获取不能设置,style能读能设;
    ###七、增加类名来设置样式

元素.className=“新的类”;

  • 代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div{
            width: 100px;
            height: 100px;
            border: 1px solid #000;
        }
        .show{
            background: #00a4ff;
        }
    </style>
    <script>
        window.onload=function () {
            var Div=document.getElementsByTagName('div')[0];
            Div.onclick=function(){
                Div.className="show";//关键点
            }

        }
    </script>
</head>
<body>
<div></div>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值