JavaScript事件与元素操作

目录

一、事件概述

二、操作元素

(一)改变元素内容

(二)改变元素其他属性

(三)操作表单元素属性

(四)操作样式属性操作

(五)排他思想

(六)操作自定义属性


在 JavaScript 的世界里,我们能够创建充满活力的动态页面,这其中事件与元素操作扮演着举足轻重的角色。

一、事件概述

事件,简单来说,就是可以被 JavaScript 侦测到的行为,遵循着 “触发 ---- 响应机制”。在网页中,每一个元素都具备触发特定 JavaScript 事件的能力,例如常见的点击事件。

事件由三要素构成:事件源、事件类型以及事件处理程序。事件源,即事件被触发的对象,也就是 “谁被触发”;事件类型,表明事件是如何被触发的,像鼠标点击、鼠标经过、键盘按下等都属于不同的事件类型;而事件处理程序,则通过函数赋值的方式来完成。

执行事件一般遵循以下步骤:首先要获取事件源,接着进行注册事件(也就是绑定事件),最后添加事件处理程序(采用函数赋值的形式)。例如:

<script type="text/javascript">

    // 第一步:获取按钮对象

    var btn = document.getElementById("btn");

    // 第二步:绑定一个单击事件

    // 第三步:添加事件处理程序

    btn.onclick = function () {

        // 像这种为单击事件绑定的函数,我们称为单击响应函数

        alert("你好");

    }

</script>

常见的事件类型丰富多样,包括鼠标事件、键盘事件以及表单事件等。

  • 鼠标事件
    • onclick:当用户单击鼠标时运行脚本。
    • onmousedown:按下鼠标按钮时运行脚本。
    • onmouseup:松开鼠标按钮时运行脚本。
    • onmousemove:鼠标指针移动时运行脚本。
    • onmouseover:鼠标指针移至元素之上时运行脚本,不可以阻止冒泡。
    • onmouseout:鼠标指针移出元素时运行脚本,不可以阻止冒泡。
    • onmouseenter:鼠标指针移至元素之上时运行脚本,可以阻止冒泡。
    • onmouseleave:鼠标指针移出元素时运行脚本,可以阻止冒泡。
    • onmousewheel:转动鼠标滚轮时运行脚本。
    • onscroll:滚动元素的滚动条时运行脚本。
  • 键盘事件
    • onkeyup:某个键盘按键被松开时触发(documentwindow)。
    • onkeydown:某个键盘按键被按下时触发,通常不会触发事件冒泡,除非特别处理。
    • onkeypress:某个键盘按键被按下时触发,会触发事件冒泡。
  • 表单事件
    • onfocus:表单获得焦点时触发。
    • onblur:表单失去焦点时触发。
    • oninput:表单每次输入时触发。
    • onchange:表单内容发生改变时触发。
    • onselect:表单文本被选取时触发。
    • onreset:表单重置时触发。
    • onsubmit:表单提交时触发。

二、操作元素

JavaScript 的 DOM 操作堪称强大,它赋予我们改变网页内容、结构以及样式的能力。通过 DOM 操作元素,我们能够对元素的内容、属性等进行灵活修改。

(一)改变元素内容
  1. element.innerText:它获取的是从起始位置到终止位置的内容,在这个过程中,会去除 HTML 标签,同时空格和换行也会一并被去掉。
  2. element.innerHTML:能获取从起始位置到终止位置的全部内容,其中包括 HTML 标签,并且会保留空格和换行。

基本使用示例

<body>

    <!-- 需求:点击button,切换内容 -->

    <button>点我切换内容</button>

    <div>天气炎热</div>

    <script>

        // 1、获取元素

        var btn = document.querySelector("button");

        var div = document.querySelector("div");

        // 2、绑定事件

        // 3、事件处理函数

        btn.onclick = function () {

            // console.log(div.innerText);

            // console.log(div.innerHTML);

            // 方式一、操作元素内容--innerText

            // div.innerText = "天气凉爽";

            // 方式二、操作元素内容--innerHTML

            div.innerHTML = "天气凉爽";

        };

    </script>

</body>

两者区别

  • innerText不识别 HTML 标签,而innerHTML能够识别 HTML 标签。
  • innerTextinnerHTML都可以获取元素内部的内容,但innerText会去除空格、换行和标签,innerHTML则可以获取到元素里面的标签,同时保留空格和换行。
(二)改变元素其他属性

对于元素的srchrefidalttitle等属性,同样可以进行修改。

示例如下:

<body>

    <!-- 需求:点击对应的按钮,可以切换图片已经更改title值 -->

    <button id="dog">小狗</button>

    <button id="cat">小猫</button><br /><br />

    <img src="./img/pic_01.jpg" title="小狗" />

    <script>

        // 1、获取元素

        var dog = document.querySelector("#dog");

        var cat = document.querySelector("#cat");

        var img = document.querySelector("img");

        // 2、绑定事件、处理函数

        dog.onclick = function () {

            img.src = "./img/pic_01.jpg";

            img.title = "小狗";

        };

        cat.onclick = function () {

            img.src = "./img/pic_02.jpg";

            img.title = "小猫";

        };

    </script>

</body>

(三)操作表单元素属性

表单元素的typevaluecheckedselecteddisabled等属性也能通过 JavaScript 进行操作。

例如:

<body>

    <!-- 需求:1、点击按钮,更换input里的显示内容为:‘内容被修改了’

    需求2:点击按钮,按钮就被禁用了

    -->

    <button>按钮</button>

    <input type="text" value="请输入内容" />

    <script>

        // 1、获取元素

        var btn = document.querySelector("button");

        var int = document.querySelector("input");

        // 绑定点击事件,处理函数

        btn.onclick = function () {

            int.value = "内容被修改了";

            btn.disabled = true;

        };

    </script>

</body>

(四)操作样式属性操作

通过 JavaScript,我们可以轻松修改元素的大小、颜色、位置等样式。

  1. element.style行内样式操作
    • 在 JavaScript 里面,样式采用小驼峰命名法,比如fontSizebackgroundColor
    • 使用 JavaScript 修改style样式,会产生行内样式,其 CSS 权重比较高。
  1. element.className类名样式操作
    • 当样式修改较多时,可以采用操作类名的方式来更改元素样式。
    • 由于class是保留字,所以使用className来操作元素的类名属性。
    • className会直接更改元素的类名,会覆盖原先的类名。如果想保留原先的类名,在添加更改时,需要把原先类名加上。

示例如下:

<body>

    <div class="box">box</div>

    <script>

        // 需求1:点击div,div颜色变色,用行内样式实现

        var box = document.querySelector(".box");

        box.onclick = function () {

            box.style.backgroundColor = "red";

        };

        // 需求2:鼠标移入,div的宽高发生变化,字体大小变化,字体加粗

        box.onmouseover = function () {

            // js里有个this的存在,在不同的情况下,指代不同的内容

            // 在事件函数里,this指代调用者,也就是指向事件源

            this.className = "box1";

        };

    </script>

</body>

(五)排他思想

当有同一组元素,且希望其中某一个元素实现特定样式时,就需要用到循环的排他思想算法。其步骤如下:

  1. 清除所有元素的样式。
  2. 给当前元素设置样式。

需特别注意,这两个步骤的顺序不能颠倒。

示例如下:

<body>

    <!-- 需求:给当前点击的按钮,添加背景色 -->

    <button>按钮1</button>

    <button>按钮2</button>

    <button>按钮3</button>

    <button>按钮4</button>

    <script>

        // 1、获取到所有的按钮

        var btns = document.querySelectorAll("button");

        // 2、通过循环,给所有的按钮绑定点击事件,处理函数

        for (var i = 0; i < btns.length; i++) {

            btns[i].onclick = function () {

                // 2.1清楚所有按钮的背景色

                for (var i = 0; i < btns.length; i++) {

                    btns[i].style.backgroundColor = "";

                }

                // 2.2

                this.style.backgroundColor = "red";

            };

        }

    </script>

</body>

(六)操作自定义属性
  1. 获取属性值
    • 方式一element.属性,这种方式用于获取元素自身自带的属性,例如idhrefsrc等。
    • 方式二element.getAttribute('属性'),主要用于获取自定义的属性,当然也可以获取元素自带属性。
  1. 设置属性值
    • 方式一element.属性='值',用于设置属性值。
    • 方式二element.setAttribute('属性','值'),用于设置自定义属性,同样也能设置元素自带属性。
  1. 移除某个属性:使用element.removeAttribute("属性")来移除某个属性。

示例如下:

<body>

    <!-- 需求1:获取a标签对应的href属性值以及index属性值

         需求2:设置a标签对应的href属性值为京东,以及修改index属性值为2

         需求3:移除abc属性   

    -->

    <a href="https://www.baidu.com/" index="1" abc="123">百度</a>

    <br /><br />

    <button id="btn1">获取</button>

    <button id="btn2">设置</button>

    <button id="btn3">移除</button>

    <script>

        var a = document.querySelector("a");

        var btn1 = document.querySelector("#btn1");

        var btn2 = document.querySelector("#btn2");

        var btn3 = document.querySelector("#btn3");

        btn1.onclick = function () {

            // 需求1

            console.log(a.href, "自带属性");

            console.log(a.getAttribute("index"), "自定义属性");

            console.log(a.getAttribute("href"), "自带属性");

        };

        btn2.onclick = function () {

            // 需求2

            a.href = "https://www.jd.com/";

            a.setAttribute("index", "2");

        };

        btn3.onclick = function () {

            // 需求3

            a.removeAttribute("abc");

        };

    </script>

</body>

  1. 设置 H5 自定义属性

为了清晰区分自定义属性和元素自带属性,H5 新增了自定义属性规范:自定义属性以data-开头作为属性名并附值。

获取自定义属性

    • 方式一element.getAttribute('属性')
    • 方式二element.dataset.去除掉data-的属性名

示例如下:

<body>

    <div data-index="abc" data-last-name="王"></div>

    <script>

        var div = document.querySelector("div");

        // 设置自定义属性

        div.setAttribute("data-id", "hello");

        // 获取自定义属性

        // 方式一:element.getAttribute("自定义属性名")

        console.log(div.getAttribute("data-index"));

        // 方式二:element.dataset.属性名

        console.log(div.dataset); //得到一个对象

        console.log(div.dataset.index); //读取对象

        console.log(div.dataset["id"]); //读取对象

        console.log(div.dataset.lastName); //驼峰命名法读取

    </script>

</body>

</doubaocanvas>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值