【第五部分 | JS WebAPI】2:DOM 元素操作

news2024/11/22 20:46:06

目录

1-1 改变元素内容(去除html和空格换行)

1-2 改变元素内容(保留html和空格换行 用的最多)

1-3 获取元素的内容

[ 更多其它可操作的元素属性 ]

2-1 修改元素的属性

2-2 修改表单元素属性

2-3 使用this指向函数调用者

3-1 通过 element.style 样式属性操作

3-2 通过 element.className 进行样式属性批量修改

4-1 获取用户输入的值 inputElement.value

4-2 案例:判断用户输入的密码是否符合要求

5-1 获取自定义属性

6-2 设置自定义属性的值

6-3 移除自定义属性

[ 总结 ]


事件:进行对元素某些操作的响应

操作元素:DOM 操作可以改变网页内容、结构和样式,我们可以利用 DOM 操作元素来改变元素里面的内 容 、属性等。注意以下都是属性

1-1 改变元素内容(去除html和空格换行)

从起始位置到终止位置的内容, 但它去除 html 标签, 同时空格和换行也会去

element.innerText = 'XXXXXX';
<!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>
    <div id="id">猜猜我是谁</div>
    <button id="btn">Guess</button>
    <script>
        //获取元素
        var id = document.getElementById('id');
        var btn = document.getElementById('btn');

        //绑定事件、函数
        btn.onclick = function(){
            id.innerText = '我是Klee';
        }
        
    </script>
</body>
</html>
 

1-2 改变元素内容(保留html和空格换行 用的最多)

  • innerText不识别html标签,会保留下来显示,而且不会换行和空格

  • innerText是IE自己发起的,火狐不支持;innerHTML是W3C推荐的,用的最多。

element.innerHTML = 'XXXXX';

1-3 获取元素的内容

  • element.innerText 和 element.innerHTML 除了能修改元素内容,还能读取元素内容。

  • 区别的方式在于: XXXX = element.innerXXX 则代表获取 ; element.innerXXX = XXX 则代表修改


[ 更多其它可操作的元素属性 ]

基本用法:

获取元素 → 绑定事件 → 声明函数 → 元素.属性 = 要修改的值

2-1 修改元素的属性

如 img src="XXXX",我们通过元素的操作,其实还可以修改诸如src这样的路径

    <!-- 改变元素属性 -->
    <img src="imgs/p1.jpg" id="img" style="width: 400px;height: 600px;">
    <button id="changeP">换图片</button>
    <script>
        //获取元素
        var img = document.getElementById('img');
        var change = document.getElementById('changeP');
        //绑定事件、函数
        change.onclick = function(){
            //修改img的src属性,更换图片
            img.src = 'imgs/p2.jpg';
        }
    </script>

 


2-2 修改表单元素属性

案例:点击小眼睛把密码改为明文显示

    <!-- 操作表单元素:点击小眼睛可以明文密码 -->
    <input type="password" placeholder="input pwd" name="pass" id="pass">
    <button id="eye">eye</button>
    <script>
        //获取元素
        var pass = document.getElementById('pass');
        var eye = document.getElementById('eye');
        //绑定事件、函数
        eye.onclick = function(){
            pass.type = 'text';
        }
    </script>

 案例2:按钮点击之后,不给再点击

 


2-3 使用this指向函数调用者

  • 上述案例“按钮点击之后,不给再点击” 的 btn.disabled = true; 可以改写为 this.disabled = true; 效果一样

  • this指向的是函数调用者。


3-1 通过 element.style 样式属性操作

我们可以通过 JS 修改元素的大小、颜色、位置等样式

 

element.style 的语法只能一次修改一个属性。 如果需要批量修改属性,建议使用className语法,后面会学习

 

代码示例

    <!-- 样式属性操作 -->
    <div class="b" style="width: 100px;height: 100px; background-color: pink;"></div>
    <button id="changeStyle">换皮肤</button>
    <script>
        //获取元素
        var b = document.getElementsByClassName('b'); //这个获取的是一个元素对象集合!需要 b[0] 取出元素对象
        var block = b[0];
        var changeStyle = document.getElementById('changeStyle');
        //绑定事件和函数
        changeStyle.onclick = function(){
            block.style.backgroundColor = 'blue';//JS的属性名字是驼峰命名法
        }        
    </script>

 案例:淘宝二维码点叉隐藏(思路:点击按钮,则隐藏元素)

 案例:循环精灵图

案例:新浪下拉菜单

<!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>
        * {
            margin: 0;
            padding: 0;
        }

        li {
            list-style: none;
        }

        .nav {
            position: relative;

            width: 100%;
            height: 60px;
            background-color: lightblue;
        }

        .nav .box1 {
            width: 100px;
            height: 100%;
            
            color: black;
            font-size: 20px;
            font-weight: 600;
            text-align: center;
            line-height: 60px;
        }

        .nav .box1:hover {
            background-color: lightslategray;
        }

        .nav .box1content {
            position: absolute;
            left: 0;
            top: 60px;

            width: 100px;
            height: 100px;
            background-color: pink;

            visibility: hidden;
        }
    </style>
</head>
<body>
    <div class="nav">
        <div class="box1">下拉菜单</div>
        <div class="box1content">
            <li>1</li>
            <li>2</li>
            <li>3</li>
        </div>
    </div>

    <script>
        var box1 = document.querySelector('.nav .box1');
        var content1 = document.querySelector('.nav .box1content');

        box1.onmouseover = function(){
            content1.style.visibility = 'visible';
        }
        box1.onmouseout = function(){
            content1.style.visibility = 'hidden';
        }
        content1.onmouseover = function(){
            content1.style.visibility = 'visible';
        }
        content1.onmouseout = function(){
            content1.style.visibility = 'hidden';
        }

    </script>
</body>
</html>

 


3-2 通过 element.className 进行样式属性批量修改

基本语法

<style>
	.classname {
		//属性
	}
</style>

<script>
	var element = document.getXXXX; 
	element.className = 'classname';
</script>


注意事项

  • 如果样式修改较多,可以采取操作类名方式更改元素样式。

  • 通过element.className赋值的新css类名样式,会覆盖掉原先元素所使用的CSS样式类名

  • 如果想保留原先的CSS样式类名,可以写成 element.className = '原先的类名 新样式类名';

代码示例

<!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>
        .box {
            width: 200px;
            height: 200px;
            margin: 100px auto;
            background-color:  pink;
        }

        .boxchange {
            width: 300px;
            height: 300px;
            margin: 90px auto;
            background-color: greenyellow;
        }
    </style>
</head>
<body>
    <div class="box"></div>
    <button id="btn">Click</button>
    <script>
        var box = document.getElementsByClassName('box');
        var boxObj = box[0];//通过className获取的是元素对象集合,需要通过下标取出元素对象
        var btn = document.getElementById('btn');
        btn.onclick = function(){
            boxObj.className = 'boxchange';//注意,这里的CSS类名不需要加 “ . ”
        }
        
    </script>
</body>
</html>

4-1 获取用户输入的值 inputElement.value

//input表单元素的元素对象是i的话,则获取用户输入的内容的语法是

var XXX = i.value;

案例:密码框格式提示错误信息

<!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>
        /* CSS样式 */
        * {
            margin: 0;
            padding: 0;
        }

        .box {
            width: 700px;
            height: 100px;
            margin: 200px auto;
            background-color: antiquewhite;
        }

        .box .put {
            width: 100%;
            height: 50px;
        }

        .box .put input {
            display: block;
            float: left;
            margin: 10px;
            width: 300px;
            height: 20px;
        }

        .box .put .tips {
            float: left;

            margin: 12px;
            height: 20px;
            width: 300px;
            border: red;

            line-height: 20px;
            color: red;
            font-weight: 600;
            font-family: 'Microsoft YaHei';

            visibility: hidden;
        }


        .box button {
            margin: 10px;
            display: block;
            float: left;
        }
    </style>
</head>
<body>
    <!-- 基本结构 -->
    <div class="box">
        <div class="put">
            <input type="password" placeholder="设置密码" name="pwd" value="">
            <div class="tips">X 格式不符合要求!需要6位,且含大小写</div>
        </div>
        <button>设置</button>
    </div>

    <!-- JS逻辑判断 -->
    <script>
        var btn = document.querySelector('.box button');
        var pwd = document.querySelector('.box .put input');
        var tip = document.querySelector('.box .put .tips');

        btn.onclick = function(){
            var pwdStr = pwd.value;//通过input的value获取用户输入
            console.log(pwdStr);
            if(pwdStr.length < 6) {
                tip.style.visibility = 'visible';
            }
            else {
                tip.style.visibility = 'hidden';
                alert('注册成功');
            }
        }

    </script>

</body>
</html>

 

路二:光标离开,则触发事件。 input.onblur


4-2 案例:判断用户输入的密码是否符合要求

JS中的字符不能直接当ASCII码使用!需要进行转换

char → ASCII

 let x = 'a';
 x.charCodeAt(); //会输出'a'的ASCII码,即97

ASCII → char

String.fromCharCode(97); //会输出ASCII码为97的字符,即'a'

示例代码:用户输入的密码 小于6位,并且不含大写和小写 则提示不合格

<!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>
        /* CSS样式 */
        * {
            margin: 0;
            padding: 0;
        }

        .box {
            width: 700px;
            height: 100px;
            margin: 200px auto;
            background-color: antiquewhite;
        }

        .box .put {
            width: 100%;
            height: 50px;
        }

        .box .put input {
            display: block;
            float: left;
            margin: 10px;
            width: 300px;
            height: 20px;
        }

        .box .put .tips {
            float: left;

            margin: 12px;
            height: 20px;
            width: 300px;
            border: red;

            line-height: 20px;
            color: red;
            font-weight: 600;
            font-family: 'Microsoft YaHei';

            visibility: hidden;
        }


        .box button {
            margin: 10px;
            display: block;
            float: left;
        }
    </style>
</head>
<body>
    <!-- 基本结构 -->
    <div class="box">
        <div class="put">
            <input type="password" placeholder="设置密码" name="pwd" value="">
            <div class="tips">X 格式不符合要求!需要6位及以上,且含大小写</div>
        </div>
        <button>设置</button>
    </div>

    <!-- JS逻辑判断 -->
    <script>
        var btn = document.querySelector('.box button');
        var pwd = document.querySelector('.box .put input');
        var tip = document.querySelector('.box .put .tips');

        btn.onclick = function(){
            var pwdStr = pwd.value;//通过input的value获取用户输入
            console.log(pwdStr);

            if(pwdStr.length < 6 || !haveBigOrSmall(pwdStr)) {
                tip.style.visibility = 'visible';
            }
            else {
                tip.style.visibility = 'hidden';
                alert('注册成功');
            }
        }

        function haveBigOrSmall(str){
            var len = str.length;
            var small = false;
            var big = false;

            for(var i=0 ; i<len ; i++){

                if(big && small){
                    return true;
                }

                if( str.charCodeAt(i) >= 65 && str.charCodeAt(i) <= 90 && big!=true ){
                    big = true;
                }
                if( str.charCodeAt(i) >= 97 && str.charCodeAt(i) <= 122 && small!=true ){
                    small = true;
                }
            }
            return false;
        }


    </script>

</body>
</html>

5-1 获取自定义属性

什么是自定义属性?

  • 写在标签内的非内置属性,则被视为自定义属性

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

  • 如下列的index。它不属于Html内置的属性,但是也不会编译报错(毕竟Html是文本语言嘛),而是会把index看作一个程序员自定义的属性

 

<div index="1"></div>

自定义属性如何获取?

元素对象.getAttribute('属性名字');
  • 需要注意的是:自定义属性的获取语法,也可以作用于 内置元素属性(如style、src、title等)

区别


6-2 设置自定义属性的值

值得注意的是:若标签名中没有对应的自定义属性,则在使用setAttribute的时候会自动添加这个属性

 

代码示例  

<div index="2"></div>
<script>
	var div = document.getElementByTagName('div'); //获取dom元素对象
	div.setAttribute('index','2'); //设置对象中的自定义属性的值为2
</script>

6-3 移除自定义属性

element.removeAttribute('属性');

[ 总结 ]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25971.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day35 XSS跨站反射存储DOM盲打劫持

前言 #知识点&#xff1a; 1、XSS跨站-原理&攻击&分类等 2、XSS跨站-反射型&存储型&DOM型等 3、XSS跨站-攻击手法&劫持&盗取凭据等 4、XSS跨站-攻击项目&XSS平台&Beef-XSS 1、原理 指攻击者利用网站程序对用户输入过滤不足&#xff0c;输…

redis<二>spring使用redis,配置远程登录和密码

使用默认的redis配置 改pom, 加入redis依赖,版本可以不需要写&#xff0c;由spring的父工程控制。 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis --> <!--整合redis--> <dependency><groupId>…

Spring Bean基础-4

1. 定义Bean: 什么是BeanDefinition? 什么是BeanDefinition?BeanDefinition 是 Spring Framework 中定义 Bean 的配置元信息接口, 包含: Bean 的类名Bean 行为配置元素, 如作用域、自动绑定的模式、生命周期回调等其他 Bean 引用, 又可称作合作者 (Collaborators) 或者依赖 …

Feign的简介及使用

一、Feign简介 Feign是一个声明式的http客户端&#xff0c;官方地址:https://github.com/OpenFeign/feign 其作用就是帮助我们优雅的实现http请求的发送&#xff0c;解决代码可读性差&#xff0c;编程体验不统一、参数复杂URL难以维护的问题。 二、使用Feign的步骤 1.引入依赖…

网络原理(Java网络编程)

1.局域网和广域网 局域网LAN: 即 Local Area Network,简称LAN. 局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的.局域网一般可以由交换机或路由器组建. 广域网WAN: 即 Wide Area Network,简称WAN. 广域网是将多个局域网…

【28-业务开发-基础业务-属性管理-SKU和SPU基本概念-SKU和SPU关联关系-属性实体之间的关联关系-批量菜单创建】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了&#xff0c;请点击这里&#xff01;】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…

力扣(LeetCode)32. 最长有效括号(C++)

栈模拟 合法的括号序列满足两条性质&#xff1a; 1.左括号数等于右括号数 2.任意前缀里&#xff0c;左括号数大于等于右括号数。 括号匹配和栈很般配&#xff0c;遇到左括号&#xff0c;下标入栈&#xff0c;遇到右括号&#xff0c;弹栈匹配。 这题的前缀里有两种不合法&…

【LSTM回归预测】attention机制LSTM时间序列回归预测【含Matlab源码 1992期】

⛄一、attention机制LSTM预测 1 总体框架 数字货币预测模型分为两部分&#xff0c;由LSTM模块和Attention模块组成。 2 LSTM模块 长短期记忆网络&#xff08;LSTM&#xff09;是一种特殊的递归神经网络&#xff08;RNN&#xff09;模型&#xff0c;是为了解决RNN模型梯度消失…

【Codeforces Round #835 (Div. 4)】A——G题解

文章目录A Medium Number题意思路代码B Atillas Favorite Problem题意思路代码C Advantage题意思路代码D Challenging Valleys题意思路代码E Binary Inversions题意思路代码F Quests题意思路代码G SlavicGs Favorite Problem题意思路代码A Medium Number 题意 三个数&#xf…

窗口-视口转换(详细)

在QPainter中&#xff0c;绘制图像使用逻辑坐标绘制&#xff0c;然后再转化为绘图设备的物理坐标。 窗口&#xff08;window&#xff09;&#xff1a;表示逻辑坐标下的相同矩形视口&#xff08;viewport&#xff09;&#xff1a;表示物理坐标下的指定的一个任意矩形默认情况&am…

中国互联网大会天翼云展区大揭秘!

11月15日&#xff0c;由工业和信息化部、深圳市人民政府主办&#xff0c;中国互联网协会、广东省通信管理局、深圳市工业和信息化局等单位承办的2022&#xff08;第二十一届&#xff09;中国互联网大会在深圳开幕。本届大会以“发展数字经济 促进数字文明”为主题&#xff0c;聚…

单商户商城系统功能拆解34—应用中心—分销应用

单商户商城系统&#xff0c;也称为B2C自营电商模式单店商城系统。可以快速帮助个人、机构和企业搭建自己的私域交易线上商城。 单商户商城系统完美契合私域流量变现闭环交易使用。通常拥有丰富的营销玩法&#xff0c;例如拼团&#xff0c;秒杀&#xff0c;砍价&#xff0c;包邮…

在IDEA中搭建Spring5.2.x版本源码(~附带完整过程和图示~)

1.开发环境 JDK8IntelliJ IDEA 2019.1.4 gradle 5.6.4git 2.33.0 2.操作步骤 下载并安装git 进入https://git-scm.com/downloads&#xff0c;下载对应操作系统的git版本一直点击next安装即可记得配置环境变量 获取Spring源码 使用clone的方式将源码拉取到本地&#xff0c;方便…

Java递归查询树形结构(详解)

一.数据准备 数据库表结构如下所示&#xff0c; INSERT INTO jg_user.com_type(type_id, parent_id, type_name) VALUES (1, 0, 合伙企业); INSERT INTO jg_user.com_type(type_id, parent_id, type_name) VALUES (2, 0, 有限公司); INSERT INTO jg_user.com_type(type_id, p…

力扣(LeetCode)878. 第 N 个神奇数字(C++)

二分查找数论 数论知识——辗转相除法、容斥原理。 辗转相除求最大公约数&#xff0c;两数相乘除以最大公约数&#xff0c;就是最小公倍数。 容斥原理求最多不重复元素&#xff0c;最大不重复面积。 <小学数奥> 从数据范围里&#xff0c;用容斥原理找 a/ba/ba/b 的倍数个…

Pytorch 下 TensorboardX 使用

这里引用一下在其他地方看到的一些话&#xff1a; tensorboard做为Tensorflow中强大的可视化工具&#xff0c;已经被普遍使用。 但针对其余框架&#xff0c;例如Pytorch&#xff0c;以前一直没有这么好的可视化工具可用&#xff0c;PyTorch框架自己的可视化工具是Visdom&…

实验九 数据微积分与方程数值求解(matlab)

实验九 数据微积分与方程数值求解 1.1实验目的 1.2实验内容 1.3流程图 1.4程序清单 1.5运行结果及分析 1.6实验的收获与体会 1.1实验目的 1&#xff0c;掌握求数值导数和数值积分的方法&#xff1b; 2&#xff0c;掌握代数方程数组求解的方法&#xff1b; 3&a…

【Mysql】Centos 7.6安装Mysql8

这里centos为阿里云默认镜像。 一、卸载历史历史版本 1、检查是否有服务启动 # service mysqld status 2、停止mysql服务 # service mysqld stop 3、查看mysql历史安装组件 # rpm -qa|grep mysqlmysql-libs-5.1.71-1.el6.x86_64 4、卸载组件 # rpm -e --nodeps mysql…

2022世界VR产业大会圆满收官,酷雷曼惊艳亮相!

11月14日&#xff0c;由工业和信息化部、江西省人民政府联合主办的全球VR领域规模最大、规格最高、影响最广的年度盛会——2022世界VR产业大会在江西南昌圆满落下帷幕。 本次大会得到了党中央、国务院的高度重视&#xff0c;国务委员王勇出席大会开幕式并讲话&#xff1b;大会邀…

【转】DNS隧道检测特征

原文链接&#xff1a;DNS隧道检测特征总结 - 知乎 一、摘要 企业内网环境中&#xff0c;DNS协议是必不可少的网络通信协议之一&#xff0c;为了访问互联网和内网资源&#xff0c;DNS提供域名解析服务&#xff0c;将域名和IP地址进行转换。网络设备和边界防护设备在一般的情况…