JavaScript高级Ⅱ(全面版)

news2024/11/17 23:38:09

接上文 JavaScript高级Ⅰ JavaScript高级Ⅰ(自认为很全面版)-CSDN博客

目录

第2章 DOM编程

2.1 DOM编程概述

2.1.4 案例演示(商品全选)

2.1.5 dom操作内容

代码演示:

运行效果:

2.1.6 dom操作属性

代码演示:

运行效果:

2.1.7 dom操作样式

代码演示:

运行效果:

2.1.8 dom操作元素

代码演示:

运行效果:

2.1.9 案例演示(省市级联)


第2章 DOM编程

2.1 DOM编程概述

2.1.4 案例演示(商品全选)

实现 商品全选/反选功能

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>16-案例-商品全选</title>
</head>
<body>

<button id="btn1">1. 全选</button>
<button id="btn2">2. 反选</button>
<br/>
<input type="checkbox">电脑<input type="checkbox">手机<input type="checkbox">汽车<input type="checkbox">别墅<input type="checkbox" checked="checked">笔记本
<script >
    let allBox =document.querySelectorAll('input[type="checkbox"]');//获取所有复选框
    let btn1 = document.querySelector('#btn1');//全选按钮
    let btn2 = document.querySelector('#btn2');//反选按钮
    // 1. 全选
    btn1.onclick = function () {
        for(let b of allBox){
            b.checked = true;//全部选中
        }
    }
    // 2. 反选
    btn2.onclick = function () {
        for(let b of allBox){
            b.checked = !b.checked;//全部反选
        }
    }
</script>
</body>
</html>

运行效果:

2.1.5 dom操作内容

dom操作内容

1. 向body中追加html内容 document.write(html内容)

2. 获取或修改元素的纯文本内容 element.innerText 获取元素的纯文本内容

3. 获取或修改元素的html内容 element.innerHTML 获取元素的html内容

4. 获取或修改包含元素自身的html内容 element..outerHTML 获取包含元素自身的html内容

小总结:

element.innerText = 普通文本

element.innerHTML = html内容

区别

innerHTML 会被当做html解析渲染

代码演示:
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>09-dom操作内容</title>
</head>
<body>


<div id="d1">
    <div id="d2">
        d2的纯文本内容
        <p id="p1">p1的纯文本内容</p>
    </div>
    <p id="p2">p2的纯文本内容</p>
</div>

<script >
    // 1. 向body中追加html内容
    document.write("<p style='color:red;'>向body中追加html内容</p>");
    // 2. 获取或修改元素的纯文本内容
    let p2 = document.querySelector("#p2");
    console.log(p2.innerText);;//获取元素的纯文本内容
    let d2 = document.querySelector("#d2");
    console.log(d2.innerText);;//获取元素的纯文本内容
    p2.innerText = "修改之后的p2的纯文本内容";
    // 3. 获取或修改元素的html内容
    console.log(d2.innerHTML);//获取元素的html内容
    d2.innerHTML = "<p style='color:blue;'>修改后的d2的html内容</p>"
    // 4. 获取或修改包含元素自身的html内容
    console.log(d2.outerHTML);//获取包含元素自身的html内容
</script>

</body>
</html>
运行效果:

2.1.6 dom操作属性

dom操作属性

1. 获取文本框,单选框或复选框的选中状态 语法: element.attribute 获取或修改元素的原生属性值

2. 给元素设置自定义属性 语法: element.setAttribute(属性名,属性值) 设置属性值(原生和自定义)

3. 获取元素的自定义属性值 语法: element.getAttribute(属性名) 获取属性值(原生和自定义)

4. 移除元素的自定义属性 语法: element.removeAttribute(属性名) 移除元素的属性(原生和自定义)

5. 获取元素的属性集合(了解) 语法: element.attributes 获取元素的所有属性集合

小扩展:

w3c组织规定了每一标签所拥有的属性,这些w3c定义好的属性被称作标签的原生属性.

在html中允许开发者给标签添加额外的属性,这些自定义属性用来给标签添加额外的特性.

w3c约定开发者添加的自定义属性 以 data- 为前缀.

小结(重要):

获取或修改表单中 单选框,复选框 的选中状态时

使用 element.checked 得到 true或false

(不建议)使用 element.getAttribute(属性名) 得到的是 checked 或者 null

代码演示:
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>10-dom操作属性</title>
</head>
<body>

<form action="#" method="get">
    姓名 <input type="text" name="userName" value="张三"/> <br/>
    密码 <input type="password" name="userPass" > <br/>
    生日 <input type="date" name="userBirth"><br/>
    性别 <input type="radio" name="gender" value="男" checked="checked">男&emsp;<input type="radio" name="gender" value="女"/>女<br/>
    爱好 <input type="checkbox" name="hobby" value="1">抽烟<input type="checkbox" name="hobby" value="2">喝酒<input type="checkbox" name="hobby" value="3">烫头<br/>
    头像 <input type="file" name="userPic"><br/>
    学历
    <select name="userEdu" >
        <option value="0">请选择</option>
        <option value="1">入门</option>
        <option value="2">精通</option>
        <option value="3">放弃</option>

    </select><br/>
    简介
    <textarea name="userIntro"  cols="30" rows="10">默认值</textarea><br/>
    <input type="reset" value="清空按钮"/>
    <input type="submit" value="提交按钮"/><br/>
    <input type="button" value="普通按钮">
    <button>专业按钮</button><button>&times;</button>


</form>
<script >
    // 1. 获取文本框,单选框或复选框的选中状态
    let userName = document.querySelector('input[type="text"]');//获取元素
    console.log(userName.value);//获取value属性的值
    userName.value = "李四";//设置value属性的值
    let gender = document.querySelector('input[name="gender"]');//获取元素
    console.log(gender.checked);//获取单选框的选中状态
    document.querySelector('input[value="女"]').checked=true;//设置女被选中
    console.log(document.querySelector('input[value="女"]').getAttribute("checked"));//不建议使用
    // 2. 给元素设置自定义属性
    userName.setAttribute("data-msg","姓名自定义数据");//设置自定义属性
    // 3. 获取元素的自定义属性值
    console.log(userName.getAttribute("data-msg"));//获取属性值
    // 4. 移除元素的自定义属性
    userName.removeAttribute("data-msg");//移除元素的属性
    // 5. 获取元素的属性数组(集合)
    let allAttri = userName.attributes;//获取元素的属性集合
    console.log(allAttri);
    for(let a of allAttri){
        console.log(a)
    }

</script>
</body>
</html>
运行效果:

2.1.7 dom操作样式

dom操作样式

1. 设置一个css样式

        语法: element.style.样式属性名 获取或设置一个css样式

        属性名含有短杠-时要转为驼峰命名 例如 element.style.backgroundColor

2. 批量设置css样式

        语法: element.style.cssText 获取或设置style属性的文本值

3. 通过class设置样式

        语法: element.className 获取或设置class属性的文本值

4. 切换class样式

        语法: element.classList es6特别提供的操作元素class的接口         element.classList常用方法有四个:

                add() 添加样式

                remove() 移除样式

                contains() 判断是否包含某个样式

                toggle() 切换样式,有就移除,没有就添加

代码演示:
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>11-dom操作样式</title>
</head>
<body>

<style>
    #p1{ background-color: red;}
    .myp{color:gold}
    .myppp{background-color: lightgray;}
</style>
<p id="p1">1. 设置一个css样式</p>
<p id="p2" >2. 批量设置css样式</p>
<p id="p3" class="myppp">3. 通过class设置样式</p>
<p id="p4">4. 切换class样式</p>

<script >
    // 1. 设置一个css样式
    let p1 = document.querySelector("#p1");//获取元素
    p1.style.backgroundColor = "blue";//设置背景颜色
    p1.style.color = "white";//设置字体颜色
    // 2. 批量设置css样式
    let p2 = document.querySelector("#p2");//获取元素
    p2.style.cssText = "font-family: '楷体';border: 1px solid green;border-radius: 5px;";//批量设置样式
    // 3. 通过class设置样式
    let p3 = document.querySelector("#p3");//获取元素
    p3.className = "myp myppp";//设置class值
    // 4. 切换class样式
    let p4 = document.querySelector("#p4");//获取元素
    let classList = p4.classList;//获取class值集合
    classList.add("myp");//添加样式
    classList.add("myppp");//添加样式
    console.log(classList.contains("myppp"));//判断含有样式
    classList.remove("myppp");//移除样式
    classList.toggle("myp");//切换样式


</script>
</body>
</html>
运行效果:

2.1.8 dom操作元素

dom操作元素
    1. 前面添加抽烟
        document.createElement(标签名称) 创建标签
        parentNode.insertBefore(newNode,refNode) 把元素newNode 插入到 元素parentNode 中的 refNode之前
    2. 后面添加烫头
        parentNode.appendChild(newNode) 把元素newNode追加到元素parentNode中的最后
    3. 最后添加撩妹
        element.cloneNode() 克隆元素,一般克隆完修改不同就可以,比创建元素效率高

代码演示:
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>12-dom操作元素</title>
</head>
<body>


<div id="md">
    <input id="hip" type="checkbox" name="hobby" value="喝酒"><span id="hspan">喝酒</span>
</div>

<script >

    let md = document.querySelector("#md");
    let hip = document.querySelector("#hip");
    // 1. ^^^前面添加抽烟
    //创建input标签,把新标签追加到喝酒之前
    let ip1 = document.createElement("input");//创建标签
    ip1.setAttribute("id","cip");
    ip1.setAttribute("type","checkbox");
    ip1.setAttribute("name","hobby");
    ip1.setAttribute("value","抽烟");
    console.log(ip1);
    let cspan = document.createElement("span");//创建标签
    cspan.innerText = "抽烟";//设置文本内容
    md.insertBefore(cspan,hip);//把cspan插入到md中的hip之前
    md.insertBefore(ip1,cspan);//把ip1插入到md中的cspan之前
    // 2. ^^^后面添加烫头
    //创建input标签,把新标签追加到喝酒之后
    let ip2 = document.createElement("input");//创建标签
    ip2.setAttribute("id","tip");
    ip2.setAttribute("type","checkbox");
    ip2.setAttribute("name","hobby");
    ip2.setAttribute("value","烫头");
    console.log(ip2);
    let tspan = document.createElement("span");//创建标签
    tspan.innerText = "烫头";//设置文本内容
    md.appendChild(ip2);//在md中最后添加ip2
    md.appendChild(tspan);//在md中最后添加tspan
    // 3. ^^^点击按钮添加王者
    let ip3 = ip2.cloneNode();//克隆元素
    console.log(ip3);
    ip3.setAttribute("id","lip");
    ip3.setAttribute("value","撩妹");
    let lspan = tspan.cloneNode();//克隆元素
    lspan.innerText = "撩妹";//设置文本内容
    md.appendChild(ip3);//在md中最后添加ip2
    md.appendChild(lspan);//在md中最后添加tspan

</script>
</body>
</html>
运行效果:

2.1.9 案例演示(省市级联)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>省市级联</title>
		<style type="text/css">
					.regist_bg {
						width: 100%;
						height: 600px;
						padding-top: 40px;
						background-image: url(../img/bg.jpg);
					}
					.regist {
						border: 7px inset #ccc;
						width: 600px;
						padding: 40px 0;
						padding-left: 80px;
						background-color: #fff;
						margin-left: 25%;
						border-radius: 10px;
					}
					input[type="submit"] {
						background-color: aliceblue;
						width: 100px;
						height: 35px;
						color: red;
						cursor: pointer;
						border-radius: 5px;
					}
		</style>

	</head>
	<body>
		<div class="regist_bg">
			<div class="regist">
				<form action="#">
					<table width="600" height="350px">
						<tr>
							<td colspan="3">
								<font color="#3164af">会员注册</font> USER REGISTER
							</td>
						</tr>
						<tr>
							<td align="right">用户名</td>
							<td colspan="2"><input id="loginnameId" type="text" name="loginname" size="60" /> </td>
						</tr>
						<tr>
							<td align="right">密码</td>
							<td colspan="2"><input id="loginpwdId" type="password" name="loginpwd" size="60" /> </td>
						</tr>
						<tr>
							<td align="right">确认密码</td>
							<td colspan="2"><input id="reloginpwdId" type="password" name="reloginpwd" size="60" /> </td>
						</tr>
						<tr>
							<td align="right">Email</td>
							<td colspan="2"><input id="emailId" type="text" name="email" size="60" /> </td>
						</tr>
						<tr>
							<td align="right">姓名</td>
							<td colspan="2"><input name="text" name="username" size="60" /> </td>
						</tr>
						<tr>
							<td align="right">性别</td>
							<td colspan="2">
								<input type="radio" name="gender" value="男" checked="checked" />男
								<input type="radio" name="gender" value="女" />女
							</td>
						</tr>
						<tr>
							<td align="right">电话号码</td>
							<td colspan="2"><input type="text" name="phone" size="60" /> </td>
						</tr>
						<tr>
							<td align="right">所在地</td>
							<td colspan="3">								
								<select id="provinceId" style="width:150px">
									<option value="">----请-选-择-省----</option>
								</select>
								<select id="cityId" style="width:150px">
									<option value="">----请-选-择-市----</option>
								</select>
							</td>
						</tr>
						<tr>
							<td width="80" align="right">验证码</td>
							<td width="100"><input type="text" name="verifyCode" /> </td>
							<td><img src="../img/checkMa.png" /> </td>
						</tr>
						<tr>
							<td></td>
							<td colspan="2">
								<input type="submit" value="注册" />
							</td>
						</tr>
					</table>
				</form>
			</div>
		</div>
<!--
省市级联
	1. 页面加载完成后自动装载省数据
	2. 当选中省时,装载该省的市数据
-->
		<script type="text/javascript">
			//准备省市数据
			let provinceData = ["北京","河北","辽宁"];
			let cityData = {
				"北京":["顺义区","昌平区","朝阳区"],
				"河北":["保定","石家庄","廊坊"],
				"辽宁":["沈阳","铁岭","抚顺"]
			};
			// 1. 页面加载完成后自动装载省数据
			let province = document.querySelector("#provinceId");//获取省
			window.onload = function(){
				for(let prov of provinceData){
					let option = document.createElement("option");//创建option标签
					option.value = prov;
					option.innerText = prov;
					province.appendChild(option);//给省追加选项
				}
			}
			// 2. 当选中省时,装载该省的市数据
			let city = document.querySelector("#cityId");//获取市
			province.onchange = function(){
				let provinceStr = this.value;
				console.log(provinceStr);//当前选中的省
				let currentCityData = cityData[provinceStr];//当前的市
				city.innerHTML = '<option value="">----请-选-择-市----</option>';//初始化市
				for(let cit of currentCityData){
					let option = document.createElement("option");//创建option标签
					option.value = cit;
					option.innerText = cit;
					city.appendChild(option);//给省追加选项
				}

			}

		</script>

	</body>
</html>

运行效果:

更多内容敬候 JavaScript高级Ⅲ

欢迎大家指点评论~ 点赞+关注⭐⭐⭐

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

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

相关文章

程序设计基础--C语言【一】

课堂笔记 1.整数数制 整数数制包括二进制数、八进制数、十进制数、十六进制数 1.1.十进制数 基数为10&#xff0c;由0到9这十个数构成。例如&#xff0c;4261可以看作是&#xff1a; &#xff08;4*1000&#xff09;&#xff08;2*100&#xff09;&#xff08;6*10&#x…

最简单的电子书制作方法

制作电子书的方法有很多种&#xff0c;但最简单的一种可能就是使用在线工具了。现在有很多免费的在线工具可以让您轻松地创建电子书&#xff0c;而无需任何编程或设计技能。以下是最简单的电子书制作方法&#xff1a; 1. 准备好制作工具&#xff1a;FLBOOK在线制作电子杂志平台…

内存管理 --- 页面置换算法

最优置换&#xff1a;&#xff08;参照未来OPT&#xff09; 可以将将来很长一段时间不会访问的逻辑页面&#xff0c;进行置换 举例说明&#xff1a; 首先物理空间只有4个&#xff0c;然后遍历了ABCD 页&#xff0c;其中&#xff0c;要访问5 e 了但是没有&#xff0c;即发生缺页…

登录凭证------

为什么需要登录凭证&#xff1f; web开发中&#xff0c;我们使用的协议http是无状态协议&#xff0c;http每次请求都是一个单独的请求&#xff0c;和之前的请求没有关系&#xff0c;服务器就不知道上一步你做了什么操作&#xff0c;我们需要一个办法证明我没登录过 制作登录凭…

【LLM】Advanced rag techniques: an illustrated overview

note 文章目录 noteAdvanced rag techniques: an illustrated overview基础RAG高级RAG分块和向量化(Chunking & Vectorisation)搜索索引(Search Index)1. 向量存储索引&#xff08;Vector Store Index&#xff09;2. 多层索引(Hierarchical Indices)3. 假设问题和HyDE(Hypo…

【笔记】全国大学生GIS应用技能大赛练习总结

该总结笔记为小组成员在练习完毕了历届题目后自我总结的结果&#xff0c;如有不足之处可以在评论区提出&#xff0c;排版较乱往谅解 绘制带空洞的面要素&#xff1a; 法一&#xff1a; 1、矢量化整个区域。2、矢量化空洞区域。3、将矢量化空洞区域进行合并&#xff08;编辑器…

Linux之selinux详解

华子目录 概念作用selinux与传统的权限区别selinux工作原理名词解释主体&#xff08;subject&#xff09;目标&#xff08;object&#xff09;策略&#xff08;policy&#xff09;&#xff08;多个规则的集合&#xff09;安全上下文&#xff08;security context&#xff09; 文…

【数理统计实验(四)】方差分析

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

美洲狮优化算法(Puma Optimizar Algorithm ,POA)求解机器人栅格地图最短路径规划(提供MATLAB代码)

一、美洲狮优化算法 美洲狮优化算法&#xff08;Puma Optimizar Algorithm &#xff0c;POA&#xff09;由Benyamin Abdollahzadeh等人于2024年提出&#xff0c;其灵感来自美洲狮的智慧和生活。在该算法中&#xff0c;在探索和开发的每个阶段都提出了独特而强大的机制&#xf…

java继承,接口,抽象类

目录 目录 1 继承的含义 2 继承的好处 3使类与类之间产生了关系。 看这里继承-------我的理解 代码部分 接口 代码 抽象类 代码 各位友友们大家好呀&#x1f60a;&#xff01; 今天让我们继续回顾java&#xff0c;看看java中的抽象类以及接口继承是什么&#x1f914…

【动态规划】代码随想录算法训练营第三十九天 |62.不同路径,63.不同路径II(待补充)

62.不同路径 1、题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2、文章讲解&#xff1a;代码随想录 3、题目&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右…

%xxx%的环境变量全部失效问题

现象 配置nvm环境变量时候, 我做了如下配置 home配置 NVM_HOMED:\nvm NVM_SYMLINKD:\nvm\nodejs然后配置了path 看上去没有任何毛病, 可是发现nvm -v总是提示命名不存在, 居然发现java -version命令也不存在了, 不过怎么关机重启都是无效, 后面发现直接把D:\nvm配置到path里…

[力扣 Hot100]Day49 二叉树的最近公共祖先

题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以…

通过Forms+Automate+Lists+审批,实现用车申请流程

因为Sham公司目前用的用车申请流程是使用的K2系统&#xff0c;用户申请后&#xff0c;我们还需要单独另行输入Excel来汇总申请记录&#xff0c;当然K2也能导出&#xff0c;但是需要每次导出也是很麻烦的&#xff0c;而且不灵活。 刚好最近发现Forms与Automate能联通&#xff0…

开源流程图表库(03):mxGrap-绘制图形的利器

hello&#xff0c;我是贝格前端工场&#xff0c;本期分享基于JavaScript的图形库——mxGraph&#xff0c;这个工具绘制的图表可以导出html使用&#xff0c;欢迎老铁们持续关注、点赞&#xff0c;有需求可以私信我们。 mxGraph是一款功能强大的JavaScript图形库&#xff0c;用于…

上手OpenMMLab——从零开始通过mmagic上手AIGC

上手OpenMMLab——从零开始通过mmagic上手AIGC 目录 上手OpenMMLab——从零开始通过mmagic上手AIGC**写在前面****MMagic简介与特性****环境搭建与初步探索****文本生成与编辑****图像生成与风格迁移****音频生成与语音合成****高级应用与案例分享** **总结****附录&#xff1a…

同时上内网和外网(笔记本自带的无线网卡和另外购置无线网卡)

同时上内网和外网 两无线网卡连接内外网插入新网卡后&#xff0c;重命名网卡名字信息收集IPv4属性设置永久路由 两无线网卡连接内外网 插入新网卡后&#xff0c;重命名网卡名字 两网卡同时连接网络&#xff0c;使用ipconfig /all 获取信息&#xff0c;整理如下&#xff1a; 下…

VB语言回忆录——到了是该放弃VB语言的时候了么

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 VB语言回忆录——到了是该放弃VB语言的时候了么 前言初次接触编程开始学习VB开始发挥作用版本变迁有感而发 前言 4年前&#xff08;2020年&#xff09;&#xff0c;微软 NET…

leetcode必刷题 96.不同的二叉搜索树

一、问题描述&#xff1a; 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 二、解题思路&#xff1a; 二叉树是由根节点&#xff0c;左右子树组成的&#xff0c;二叉搜索树要…

Angular基础---HelloWorld---Day3

文章目录 0.ng-model 的几种不同的class属性1.ng-model 的引用与属性的调用2.表单验证&#xff1a; (模版引用变量、ngModel 、ngif一起使用&#xff09;3.根据class属性的值ng-invalid &#xff0c;设置动态变化的样式 0.ng-model 的几种不同的class属性 引用ng-model 元素的c…