05-js

js事件及DOM

1 事件

1.2 事件介绍

事件:就是发生在浏览器页面上的一件事,键盘事件,鼠标事件,表单事件,加载事件等等

1.2 事件绑定方式

事请想要发生,就要将事件和标签先绑定

一个完整的事件有三部分

  • 事件源(标签)
  • 什么事请(事件效果)
  • 响应

事件绑定,其实就说事件和标签绑定

  • 方式1:事件,事件源,响应在一起
  • 方式2:事件源,事件在一起,响应抽取函数
  • 方式3:事件和响应全部抽取

方式1:事件源,事件,响应在一起

  <body>
    <!-- 事件源(标签),事件,响应(函数) -->
    <!-- 方式1: 事件源,事件,响应在一起 -->
    <!-- onclick是单击事件,是html属性 -->
    <!-- alert() 函数就是事件的响应 -->
    <button type="button" onclick="alert('听说你点我了?')">按钮</button>
  </body>

方式2:事件源,事件在一起,响应抽取成函数

  <body>
    <hr />
    <!-- 方式2: 事件源,事件在一起,响应抽取函数 -->
    <button type="button" onclick="dian()">按钮</button>
    <script>
      // 定义函数
      function dian() {
        alert("你又点我?!");
      }
    </script>
  </body>

方式3:事件和响应全部抽取成函数

    <!-- 方式3: 事件和响应全部抽取 -->
    <button id="btn">再点一下试试</button>
    <script>
      //先获得标签对象
      var btn = document.getElementById("btn");
      // 2) 给标签对象设置事件以及响应
      btn.onclick = function () {
        alert("上瘾了是不是?!");
      };
    </script>

1.3 不同事件的演示

这些事件,都是html中标签的属性,都是以onxxx开头

事件名称描述
onchangeHTML 元素内容改变
onblur输入框失去焦点
onfocus输入框获得焦点
onclick用户点击 (单击)HTML 元素
ondblclick用户双击HTML元素
onmouseover用户将鼠标移入一个HTML元素中
onmousemove用户在一个HTML元素上移动鼠标
onmouseout用户从一个HTML元素上移开鼠标
onkeyup键盘弹起
onkeydown用户按下键盘按键
onkeypress按压键盘
onload浏览器已完成页面的加载
onsubmit表单提交

1.3.1 鼠标事件

    <script>
      var box = document.getElementById("box");
      // 鼠标移动,只要鼠标动,就会触发函数
      box.onmousemove = function () {
        console.log("鼠标移动");
      };

      // 鼠标移入,移入进一次,触发一次
      box.onmouseover = function () {
        console.log("鼠标移入");
      };

      // 鼠标离开
      box.onmouseout = function () {
        console.log("鼠标离开");
      };
    </script>

1.3.2 键盘事件

    <script>
      var i = document.getElementById("i");
      // 事件触发后,函数有对应的事件对象
      // 键盘按下
      i.onkeydown = function (event) {
        // console.log("键盘按下");
        // event是事件对象,内部包含事件的所有信息
        // console.log(event);
        // 可以获得这次键盘事件的代号,13是回车键
        if (event.keyCode == 13) {
          console.log("提交表单");
        }
      };
      // 键盘弹起
      i.onkeyup = function () {
        // console.log("键盘弹起");
      };
      // 键盘按压(与按下效果一样)
      i.onkeypress = function () {
        // console.log("键盘按压");
      };
    </script>

1.3.3 表单事件

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>表单事件</title>
</head>
<body>
  <div>
    <!-- 
          因为tijiao()函数,返回有了true/false
          所以οnsubmit="return true" 即提交表达
             οnsubmit="return false" 阻止表达提交
       -->
    <form accept="/提交的地址" onsubmit="return tijiao()">
      用户名<input id="i1" type="text" name="username" /><br />
      密码<input type="password" name="password" /><br />
      籍贯<select id="jiguan" name="jigaun">
        <option>河南</option>
        <option>河北</option>
        <option>北京</option>
      </select>
      <input type="submit" value="提交" />
    </form>
    <script>
      var i1 = document.getElementById("i1");
      // 绑定获得焦点事件
      i1.onfocus = function () {
        // 将来可以通过操作DOM,获得输入框的值,也可以改变样式
        console.log("输入框获得焦点");
      };

      // 绑定失去焦点
      i1.onblur = function () {
        console.log("输入框失去焦点");
      };

      var jiguan = document.getElementById("jiguan");
      // 给下拉框绑定内容改变事件
      jiguan.onchange = function () {
        // 将来配合DOM操作,可以获得改变的内容,做一些其他事情
        // 可以用于省市二级联动
        console.log("内容改变");
      };

      /*
       1) 表单事件是表单form的事件,所以这个事件要绑定在form上
       2) 函数要返回true/false
       3) onsubmit中也要写return
      */
      function tijiao() {
        console.log("点击提交按钮");
        // return 返回false,认为表达不提交
        // 返回true.表达就会提交
        // 一般用来数据校验
        return true;
      }
    </script>
  </div>
</body>
</html>

1.3.4 加载事件【重点】

浏览器加载页面,是上之下依次加载执行.

<head>
  <title>加载事件</title>
  <script>
    /*
        解决方案,等页面加载完后,再触发函数,执行绑定事件
        页面加载事件是窗口对象的事件
        该函数onload,会在页面加载后触发函数
        */
    window.onload = function () {
      var btn = document.getElementById("btn");
      btn.onclick = function () {
        alert("试试就试试!");
      };
    };
  </script>
</head>
<body>
  <button id="btn">点我一下试试?!</button>
</body>

ps: js代码可以放在页面的任何地方,但是一般建议放后面,越晚加载越好!

2 DOM操作

2.1 概述

DOM,Document Object Mode,文档对象模型,将HTML页面当作文档,页面内部有各种标签,标签之间有平级,有嵌套;标签还有属性,因此document被加载成dom树,树上每一个节点就是一个标签

有了DOM树,就可以通过树来查找节点(元素),找到元素就可以对元素进行操作(修改,删除,添加),还可以操作元素样式

2.2 查找元素

查找元素有很多种方式

  • 通过id查找元素
  • 通过标签名查找元素
  • 通过class查找元素
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>查找元素</title>
</head>
<body>
  <button id = "btn">按钮</button>
  <ul>
    <li>1</li>
    <li class="dayu1">2</li>
    <li class="dayu1">3</li>
  </ul>
  <script>
    //方式1:通过id获得标签对象(对象是唯一)
    var btn = document.getElementById("btn");
    console.log(btn);

    //方式2:通过标签名获得标签对象(数组)
    var lis = document.getElementsByTagName("li");
    console.log(lis);

    //方式3:通过类名获得标签对象(数组)
    var lis = document.getElementsByClassName("dayu1");
    console.log(lis);
  </script>
</body>
</html>

2.3 元素内容的查找和设置

元素内容,是指标签开闭之间的内容.

<p>这就是内容</p>
<p><span>这就是内容</span></p>

查找和设置使用的是相同的属性

  • innerHTML 获得或设置标签的内容
  • innerText 获得或设置标签的内容
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>元素内容</title>
</head>
<body>
  <p id="p1"><span>你好啊,JavaScript</span></p>
  <button id="btn1">设置innerHTML</button>
  <button id="btn2">设置innerText</button>
  <script>
    var p1 = document.getElementById("p1");
    // 获得内容,innerHTML获得是标签和内容
    var innerHTML = p1.innerHTML;
    console.log(innerHTML);

    // 获得内容,innerText获得的只是文本内容
    var innerText = p1.innerText;
    console.log(innerText);

    var btn1 = document.getElementById("btn1");
    btn1.onclick = function () {
      // 给p标签设置内容,内容中有标签会解析成标签
      p1.innerHTML = "<span>你好,事件</span>";
    };

    var btn2 = document.getElementById("btn2");
    btn2.onclick = function () {
      // 给p标签设置内容,内容全部解析为文本
      p1.innerText = "<span>你好,事件</span>";
    };
  </script>
</body>
</html>

2.4 元素属性的查找和设置

元素属性,是指开标签内的属性,比如

  • id
  • name
  • value
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <body>
    <input id="i1" class="c1" type="text" value="默认值" />
    <button id="btn1">点击获得属性值</button>
    <button id="btn2">点击设置属性值</button>
    <script>
      var btn1 = document.getElementById("btn1");
      var i1 = document.getElementById("i1");

      btn1.onclick = function () {
        // 获得属性值
        console.log(i1.id); // 获得id属性值
        console.log(i1.class); // 没有获得class属性
        console.log(i1.type); // 获得type属性值
        console.log(i1.value); // 获得value属性值【重要】
      };

      btn2.onclick = function () {
        // 设置属性值
        i1.type = "password";
        i1.value = "123456";
      };
    </script>
  </body>
</body>
</html>

2.5 元素CSS样式的查找和设置

  • 元素css样式的查找和设置,是指标签中style的属性值的获得和设置

    • 获得属性值

      • 元素对象.style.属性
    • 设置属性值

      • 元素对象.style.属性 = “”
<body>
    <div
      id="box"
      style="width: 200px; height: 200px; background-color: red"
    ></div>
    <button id="btn1">获得css样式</button>
    <button id="btn2">设置css样式</button>
    <script>
      var box = document.getElementById("box");

      var btn1 = document.getElementById("btn1");
      btn1.onclick = function () {
        // 获得样式,主要是style的属性值
        var style = box.style;
        // console.log(style);
        // 获得具体样式,可以再继续调用
        console.log(box.style.width);
        console.log(box.style.height);
        // 有连字符的,要去掉,后面首字母变大写
        console.log(box.style.backgroundColor);
      };

      var btn2 = document.getElementById("btn2");
      btn2.onclick = function () {
        // 设置box样式,尺寸越来越大
        // 获得原来的尺寸
        var width = box.style.width; // 200px
        var height = box.style.height;
        // 获得宽度,截取数值
        // var newWidth = width.substring(0, width.length - 2);
        // 自带属性获得不带px的宽度
        var newWidth2 = box.clientWidth;
        var newHeight = box.clientHeight;
        // 设置尺寸
        box.style.width = newWidth2 + 10 + "px";
        box.style.height = newHeight + 10 + "px";

        // 只能获得,不能这样设置!
        // box.clientWidth = newWidth2 + 10;
        // box.clientHeight = newHeight + 10;
      };
    </script>
  </body>

2.6 创建元素

通过dom对象可以创建出一个标签

document.createElement(“标签名”)

2.7 创建文本内容

创建出一个文本内容,这个内容是值开闭标签间的文本内容

document.createTextNode(“文本内容”);

2.8 追加元素

在开闭标签内,在末尾追加内容

标签对象.appendChild(元素)

<body>
    <button id="btn">点击时创建p标签,已经内容</button>
    <div id="box"></div>
    <script>
      var btn = document.getElementById("btn");
      btn.onclick = function () {
        // 创建元素p
        var p = document.createElement("p"); // <p></p>

        // 创建文本内容
        var text = document.createTextNode("你好啊,Java"); // 你好啊,Java

        // 在p标签内,追加文本
        p.appendChild(text); // <p>你好啊,Java</p>

        var box = document.getElementById("box");
        // 把内容追加到div中
        box.appendChild(p);
      };
    </script>
  </body>

2.9 删除元素

删除子节点

  • 元素对象.removeChild(子元素);
<body>
    <ul id="ul">
      <li>刘德华</li>
      <li>吴彦祖</li>
      <li>彭于晏</li>
    </ul>
    <button id="btn">点击删除子元素</button>
    <script>
      var btn = document.getElementById("btn");
      btn.onclick = function () {
        // 获得父元素
        var ul = document.getElementById("ul");
        // 获得所有li元素
        var liArr = document.getElementsByTagName("li");
        // 遍历
        for (var i = 0; i < liArr.length; i++) {
          // 通过父元素,删除子元素
          ul.removeChild(liArr[i]);
          i--; //下标回退
        }
      };
    </script>
  </body>
  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值