【Java EE】-JavaScript详解

news2024/10/3 16:50:36

作者:学Java的冬瓜
博客主页:☀冬瓜的主页🌙
专栏:【JavaEE】
分享: 且视他人如盏盏鬼火,大胆地去走你的道路。——史铁生《病隙碎笔》
主要内容:HTML中引入JS的三种方式。JS语法分析,JS是动态弱类型语言,JS中的数组、方法、对象。JSWebAPI学习,选中元素和单击事件,获取和修改表单中的元素属性内容,获取和修改样式的属性和内容,新增和删除元素。使用JS实现一个简单的前端猜数字。利用CSS和JS完成一个简单的表白墙。

在这里插入图片描述

一、JS引入的三种方式

1、行内JS

<!-- 行内 JS -->
	<button type="button" onclick="alert('你干嘛,哎呦')">点击一下</button>

2、内部JS

<!-- 内部 JS -->
    <script>
        alert('你干嘛,哎呦');
    </script>

3、外部JS

<!-- 外部 JS -->
    <script src="./jsalert.js"></script>
// 要引入的外部文件jsalert.js:
	alert('你干嘛,哎呦');

二、JS 部分语法分析

1、JS是动态弱类型语言

JS的类型:使用 let来定义变量,而不是使用类型定义。
number:JS 中不区分整数和浮点数, 统一都使用 “数字类型” 来表示
string:字符串字面值需要使用引号引起来, 单引号双引号均可
boolean:布尔类型
undefined:未定义的
null:空值

动态类型:一个变量在运行过程中,类型可以发生改变。
弱类型:

JS是动态弱类型语言:
动态体现:下面代码a先被赋值为字符串 “hello”,然后再被赋值为整数 10,在JS中,是合法的。

let a = 'hello';
console.log(a);
a = 10;
console.log(a);

弱类型体现:代码中存在大量的隐式类型转换

let a = 'true';
let b = 1;
console.log(a == b);
// 结果是true

注意:如果使用`===`或者`!==`则不会类型转换再比较,会先看类型是否相同,不同则false

2、语言的类型

在这里插入图片描述

3、JS中数组

// 3.js的数组:js中用[]表示数组,数组类型不要求统一,底层使用键值对的方式
// 声明方式一:let arr = new Array();
// 声明方式二:
let arr2 = [1,"lihua",true,'15'];

// 打印方式一:
console.log("添加前:"+arr2);// 不使用字符串的方式,因为js是动态类型的语言,所以,两次打印的结果都是数组改变到最终的情况的结果
// 打印方式二:
// for(let i in arr2){
//     console.log(arr2[i]);
// }
// 打印方式三:
// for(let element of arr2){
//     console.log(element);
// }

arr2.splice(2,2,'sb');// splice方法是从2下标开始,把2个元素替换为'sb'
console.log("添加后:"+arr2);

4、JS的方法

// 4、js的方法
// js中不需要重载,可以传任意类型参数,而且使用函数时传参个数不限定!
function add(x, y){
     return x + y;
}
console.log(add("张三", 5, 8));  // 张三5
console.log(add(undefined, 10, 15, '李四'));  //NAN
console.log(add(10, 30, 90));   // 40
// js中使用方法累加
function add(x,y){
    let sum = 0;
    for(let element of arguments){  // arguments是传入的元素的集合
        sum += element;
    }
    return sum;
}
console.log(add(1,2,3,4,5,6));

// js中,函数可以赋值给一个变量,也可以返回一个方法(不是调用该方法取得返回值)
let add = function(x,y){
    return x * y;
}
console.log(add(14, 12));

5、JS中的对象

// 5.js中的对象(js不是面向对象语言,不是Java/c++中的对象),js中的对象,有属性,也有方法
// 使用Object创建的对象,属性和方法可以随时添加
// js中每个对象都是object对象
let student = {
    name: '蔡徐坤',
    age: 25,
    height: 180,
    weight: 70,
    
    sing: function(){
        return console.log("鸡你太美!");
    },
    dance: function(){
        console.log("铁山靠");
    }
}
console.log(student.name);
console.log(student.age);
student.sing();
student.dance();

let teacher = new Object();
teacher.name = "坤坤";
teacher.sing2 = function(){
    console.log("鸡你太美");
}
console.log(teacher.name);
teacher.sing2();

6、JS语法小结

  • js动态弱类型语言
  • js数组类型不要求统一,底层使用键值对的方式
  • js中方法不需要重载,可以传任意类型参数,而且使用函数时传参个数不限定!js中,函数可以赋值给一个变量,也可以返回一个方法(不是调用该方法取得返回值)
  • js的作用域:先找范围内的值,如果没有,就扩大作用域找,直到最后。
  • js中的对象(js不是面向对象语言,不是Java/c++中的对象),js中的对象,有属性,也有方法,js中每个对象都是object对象
  • js只有对象,没有类,封装,继承,多态。

三、JavaScript WebAPI

注意:JavaScript可以通过DOM api来操作页面的对象。

1、选中元素和单击事件

1.1、选中页面元素

querySelector(CSS选择器)

// 1.使用querySelector()
    <div class="box"></div>
    <div id="id"></div>
    <h3>
        <span>
            <button>i am a button</button>
        </span>
    </h3>
    <script>
        let element1 = document.querySelector('#id');
        let element2 = document.querySelector('.box');
        console.log("1.使用querySelector():");
        
        // log直接打印选中元素
        console.log(element1);
        // dir打印element对象
        console.dir(element2);
    </script>

1.2、点击弹出窗口

// 2.点击弹出窗口
	<div class="box2">鸡你太美</div>
    <script>
        let div = document.querySelector('.box2');
        div.onclick = function(){
            console.log("2.点击弹出窗口:");
            // 要点1.弹出窗口alert
            alert('哎呦,你干嘛!');

            // 要点2.打印div的内容:使用innerHTNL
            console.log(div.innerHTML);
        }
    </script>

1.3、点击切换图片

// 3.点击切换图片:使用js在单击方法中,修改img.src
    <img src="./image/mn1.jpg" alt="">
    <script>        
        let img = document.querySelector('img');
        // console.log(img);
        img.onclick = function(){
            console.dir("3.点击切换图片:");
            console.log("修改前"+img.src);
            img.src = "./image/女.jpg";
            console.log("修改后"+img.src);
        }
    </script>

2、获取/修改表单中元素属性内容

2.1、获取文本框中的内容

// 1.获取:获取文本框中的内容
    <input id="t1" type="text">
    <button id="b1">点击一下</button>  <br>
    <script>
        let input1 = document.querySelector('#t1');
        let button1 = document.querySelector('#b1');
        button1.onclick = function(){
            console.log(input1.value);
        }
    </script>

2.2、实现整数自增

// 2.修改:修改文本框内容,实现数字自增,使用parseInt转换类型
    <input id="m2" type="text">
    <button id="b2">单值自增</button>   <br>
    <script>
        let input2 = document.querySelector('#m2');
        let button2 = document.querySelector('#b2');
        button2.onclick = function(){
            let val = parseInt(input2.value);
            val += 1;
            input2.value = val;
        }
    </script>

2.3、实现密码显示和隐式的切换

// 3.修改:修改文本框属性,实现密码显示和隐式的切换
    <input id="m3" type="password">
    <button id="b3">显示密码</button>
    <script>
        let input3 = document.querySelector('#m3');
        let button3 = document.querySelector('#b3');
        button3.onclick = function(){
            let type = input3.type;
            if(type=="text"){
                input3.type = "password";
                button3.innerHTML = "显示密码";
            }else{
                input3.type = "text";
                button3.innerHTML = "隐藏密码";
            }
        }
    </script>

3、获取/修改样式属性内容

3.1、使用一个div,每次点击都会放大字体

// 1.直接修改内联样式
//   需求:使用一个div,每次点击都会放大字体
    <div style="font-size: 20px;">点击这个div字体放大</div>
    <script>
        let div = document.querySelector('div');
        div.onclick = function(){
            // 先获取到当前的字体大小
            let size = parseInt(div.style.fontSize);
            size += 10;
            console.log(size);
            div.style.fontSize = size + "px";
            console.log(div.style.fontSize);
        }
    </script>

3.2、切换日夜间模式

// 2.修改元素应用的css类名 
//   需求:切换日夜间模式
	<div id="one" class="light" style="font-size: 20px; height: 500px;">点击切换日夜间模式</div>
    <style>
        .light {
            /* 日间模式 */
            color: #000;
            background-color: #fff;
        }
        .dart {
            /* 夜间模式 */
            color: #fff;
            background-color: #000;
        }
    </style>
    <script>
        let div2 = document.querySelector("#one");
        div2.onclick = function(){
            // 注意:此处获取div的class的值不是使用div.class,而是使用div.className
            let now = div2.className;
            console.log(now);
            if(now == "light"){
                div2.className = "dart";
            }else{
                div2.className = "light";
            }
        }
    </script>

4、新增和删除元素

4.1、新增元素

// 1.新增元素:新增无序元素3-9
	<ul>
        <li>1</li>
        <li>2</li>
    </ul>
    <script>
        let ul1 = document.querySelector('ul');
        for(let i=3; i < 10; i++){
        	// 第一步:添加一个元素
            let li = document.createElement('li');
            li.innerHTML = i;
            // 第二步:把元素放入DOM树中
            ul1.appendChild(li);
        }
    </script>

4.2、删除元素

// 2.删除元素:在元素新增后元素为1-9的情况下,删除元素4
	<ul>
        <li>1</li>
        <li>2</li>
    </ul>
    <script>
        let ul1 = document.querySelector('ul');
        for(let i=3; i < 10; i++){
        	// 第一步:添加一个元素
            let li = document.createElement('li');
            li.innerHTML = i;
            // 第二步:把元素放入DOM树中
            ul1.appendChild(li);
        }
    </script>
	<script>
		// 第一步:找到并选中删除元素
        let deleteLi = document.querySelectorAll('li')[3];
        let ul2 = document.querySelector('ul');
        // 第二步:把删除元素从DOM树删除
        ul2.removeChild(deleteLi);
    </script>

5、小结

  • querySelector:选中元素
  • onclick:单击事件
  • 元素.innerHTML=值:修改元素内容
  • 元素.属性:修改元素属性
  • 元素.value,元素.type:修改表单属性
  • 元素.style.样式名=值,元素.className=CSS类名:元素样式
  • createElement():创建元素
  • appendChild():把元素放进DOM树
  • removeChild():删除元素

四、案例

1、网页版本猜数字

<!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>
    <h3>请猜数字</h3>
    <input type="text">
    <button>提交</button>        
    <!-- 这个div,专门用于显示结果result -->
    <div class="result"></div>
    
    <script>
        // 1.生成1-100的随机数
        let toGuess = parseInt(100 * Math.random()) + 1;
        console.log(toGuess);
        // 2.猜数字
        let input = document.querySelector('input');
        let button = document.querySelector('button');
        button.onclick = function() {
            // 2.1 未输入就提交直接返回
            if(input.value == null){
                return;
            }
            // 2.2 猜数字
            let div = document.querySelector('div');
            let resultDiv = document.querySelector('.result');
            if(input.value > toGuess){
                // 大了
                resultDiv.innerHTML = '大了';
            }else if(input.value < toGuess){
                // 小了
                resultDiv.innerHTML = '小了';
            }else{
                // 猜对了
                resultDiv.innerHTML = '猜对了';
            }
        }
    </script>
</body>
</html>

页面展示:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2、网页版本表白墙

<!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>表白墙</title>

    <style>
        /* 通配符选择器,选中所有标签 */
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        .container{
            width: 600px;
            margin: 20px auto;
        }
        /* 设置h2,p居中 */
        h2 {
            text-align: center;
        }
        p {
            text-align: center;
            color: #666;
            /* 先竖直,再水平 */
            margin: 20px 0;
        }


        /* 设置弹性布局 */
        .row {
            /* 开启弹性布局 */
            display: flex;
            height: 40px;
            /* 水平方向居中 */
            justify-content: center;
        }
        /* 设置提示框的长度 */
        .row span {
            width: 80px;
        }

        /* 设置输入框的长度和高度 */
        .row input {
            width: 200px;
            height: 30px;
        }

        .row button {
            color: white;
            background-color: orange;
            width: 120px;
            height: 35px;
            border: none;
            /* margin-left: 20px;
            margin-right: 20px; */
            margin: 20px;
        }
        /* 设置点击提交时变灰色 */
        button:active {
            background-color: #666;
        }
        
        /* 设置结果的div样式 */
        .result {
            text-align: center;
            margin: 20px;
            line-height: 40px;
        }

    </style>
</head>
<body>
    <div class="container">
        <h2>表白墙</h2>
        <p>输入后点击提交,信息会显示在表格下方</p>
        <div class="row">
            <span>谁:</span>
            <input type="text" class="from">
        </div>
        <div class="row">
            <span>对谁:</span>
            <input type="text" class="to">
        </div>
        <div class="row">
            <span>说:</span>
            <input type="text" class="message">
        </div>
        <div class="row">
            <button id="submit">提交</button>
            <button id="reset">重置</button>
        </div>
    </div>

    <script>
        // 一.实现表白墙展示
        let containerDiv = document.querySelector('.container');
        let inputs = document.querySelectorAll('input');
        let submit = document.querySelector('#submit');

        submit.onclick = function(){
            // 1.获取到三个input的值
            let from = inputs[0].value;
            let to = inputs[1].value;
            let mes = inputs[2].value;
            if(from == '' || to == '' || mes == ''){
                return;
            }
            // 2.构造新的展示div
            let resultDiv = document.createElement('div');
            resultDiv.className = 'row message result';
            resultDiv.innerHTML = from + ' 对: ' + to + ' 说: ' + mes;
            containerDiv.appendChild(resultDiv);
            // 3.清空表格中的内容
            for(let input of inputs){
                input.value = '';
            }
        }

        // 二.重置时把表格下的最后一条内容清除
        let reset = document.querySelector('#reset');
        reset.onclick = function(){
            // 删除最后一条消息,选中所有的row,找出最后一个row,删除
            let rowsDiv = document.querySelectorAll('.message');
            containerDiv.removeChild(rowsDiv[rowsDiv.length-1]);
        }
    </script>
</body>
</html>

页面展示:
在这里插入图片描述

输入老鼠、大米、你好,提交得:

在这里插入图片描述

输入汤姆、杰瑞、hello,提交得:

在这里插入图片描述

点击重置得:

在这里插入图片描述

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

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

相关文章

【Linux高级篇】什么是shell脚本,什么是shell变量

目录 &#x1f341;什么是shell &#x1f342;什么是shell脚本 &#x1f342;shell脚本能做什么 &#x1f342;学习shell需要哪些知识 &#x1f342;shell基本规范 &#x1f342;shell脚本五种运行方式 &#x1f341;shell变量 &#x1f342;变量命名规范 &#x1f342;shell变…

远程登录--SSH 你值得拥有

目录 一&#xff1a;SSH服务详解 1.什么是SSH 2.SSH服务认证类型 1&#xff09;基于口令认证 2&#xff09;基于密钥认证 3.SSH安装 二: 配置ssh服务端 1.ssh配置文件 2. ssh配置文件主要条目介绍 三:使用ssh客户端程序 1.使用ssh命令远程登录 ​2.使用scp远程复制 …

8086汇编之DIV除法指令

2023年4月22日&#xff0c;周六晚上。 今晚写汇编作业的时候&#xff0c;遇到了DIV指令&#xff0c;于是把学到的知识记录成一篇博客。此外&#xff0c;刚刚已经写了一篇关于MUL指令的博客了。 除数有8位和16位种&#xff0c;存放在寄存器或者内存中。 当除数为8位&#xff1a…

Linux离线状态下的Anaconda安装与Python环境创建

1 下载与安装说明 下载 下载地址&#xff1a;https://repo.anaconda.com/archive/版本&#xff1a;此处以版本为2020.11的anaconda作示例&#xff0c;其携带的python版本为3.8.5。下载&#xff1a;在上述链接查找下载 Anaconda3-2020.11-Linux-x86_64.sh 文件&#xff0c;也可以…

时序预测 | MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络时间序列预测

时序预测 | MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络时间序列预测 目录 时序预测 | MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络时间序列预测 基于鲸鱼…

图论-匈牙利算法学习

本文讲述的是匈牙利算法&#xff0c;即图论中寻找最大匹配的算法。解决的问题是从二分图中找到尽量多的匹配。 原题-华为-HJ28 素数伴侣 描述 题目描述 若两个正整数的和为素数&#xff0c;则这两个正整数称之为“素数伴侣”&#xff0c;如2和5、6和13&#xff0c;它们能应用…

【Vue】学习笔记-初始化脚手架

初始化脚手架 初始化脚手架说明具体步骤脚手架文件结构 初始化脚手架 说明 Vue脚手架是vue官方提供的标准化开发工具&#xff08;开发平台&#xff09;最新版本是4.x文档Vue CLI 具体步骤 如果下载缓慢请配置npm淘宝镜像 npm config set registry http://registry.npm.taoba…

有关态势感知(SA)的卷积思考

卷积是一种数学运算&#xff0c;其本质是将两个函数进行操作&#xff0c;其中一个函数是被称为卷积核或滤波器的小型矩阵&#xff0c;它在另一个函数上滑动并产生新的输出。在计算机视觉中&#xff0c;卷积通常用于图像处理和特征提取&#xff0c;它可以通过滤波器对输入图像进…

《Spring MVC》 第六章 MVC类型转换器、格式化器

前言 介绍MVC类型转换器、格式化器 1、使用场景 <form th:action"{/user/register}" method"post">用户名&#xff1a;<input type"text" name"userName"/><br/>密码&#xff1a;<input type"password&q…

对于Ubuntu服务器杀毒的一次记录

概述&#xff1a;叮咚&#xff01;您的主机有异常登录地&#xff0c;登录ip来自人类文明的标杆美丽国的加利福尼亚州&#xff0c;请注意排查。可恶的老美啊&#xff0c;又来入侵我华夏主机了&#xff0c;美帝亡我之心不死啊&#xff08;当然也有可能是境内中国人通过VPN操作境外…

【搭建博客】宝塔面板部署Typecho博客,并发布上线访问

目录 前言 1.安装环境 2.下载Typecho 3.创建站点 4.访问Typecho 5.安装cpolar 6.远程访问Typecho 7.固定远程访问地址 8.配置typecho 前言 Typecho是由type和echo两个词合成的&#xff0c;来自于开发团队的头脑风暴。Typecho基于PHP5开发&#xff0c;支持多种数据库&…

让chatgpt给我做个项目预算,感觉这样的项目预算才有的赚

访问入口来自于以下网站&#xff1a; 无极低码-三维可视化,免费资源下载,气象数据,编程技术,java开发,素材下载,大数据,解决方案,方案,ppt,5G,数字孪生三维可视化,免费资源下载,气象数据,编程技术,java开发,素材下载,大数据,解决方案,方案,ppt,5G,数字孪生https://wheart.cn/ …

分享几个国内免费的ChatGPT镜像网址(亲测有效-4月25日更新)

最近由于ChatGPT的爆火也让很多小伙伴想去感受一下ChatGPT的魅力&#xff0c;那么今天就分享几个ChatGPT国内的镜像网址&#xff0c;大家可以直接使用&#xff01;记得点赞收藏一下呦&#xff01; 1、AQ Bot&#xff0c;网址&#xff1a;点我 https://su.askaiw.com/aq 缺点&…

数据结构与算法(三):数论(树形结构、二叉树、二叉搜索树、红黑树、BtreeB+Tree、赫夫曼树、堆树)

数论&#xff08;树形结构、二叉树、二叉搜索树、红黑树、Btree、BTree、赫夫曼树、堆树&#xff09; 树形结构概念 在树形结构里面重要的术语&#xff1a; 结点&#xff1a;树里面的元素。 父子关系&#xff1a;结点之间相连的边 子树&#xff1a;当结点大于1时&#xff0…

服务(第十一篇)LVS-NAT模式

什么是群集&#xff1f; 多台主机组成的一个整体&#xff0c;提供一个ip访问通道&#xff0c;所有的主机干一件事 提供同样的服务。 群集有哪些类型&#xff1f; ①负载均衡群集&#xff08;LB&#xff09;&#xff1a; 提高系统的响应能力&#xff0c;处理更多的访问请求&a…

VideoPose3D:基于视频的3D人体关键点检测

1. 概述 Dario Pavllo等人于2019年提出了VideoPose3D模型&#xff0c;旨在把输入视频转换成人体各关键点相对于根关节的相对三维位置。为了实现这一目的&#xff0c;作者采取的是两步走的策略。首先要利用现成的2D姿态检测算法提取出视频各帧里人体各关键点的2D坐标&#xff0…

Bilibili 网页版下载视频 B站下载MP4格式视频(不用下载工具)

博主是为了给家里老人下载戏曲&#xff0c;一开始是单个单个解析然后下载&#xff0c;想多下载一些&#xff0c;然后用了批量方法下载很好用 通过网页版解析工具 解析单个视频 获得下载地址 复制视播放地址&#xff0c;如&#xff0c;复制播放视频时&#xff0c;上方的地址 然…

校园最热微信小程序——校园表白墙之我想对你说(青春感人系列)

校园最热微信小程序——校园表白墙之我想对你说&#xff08;青春感人系列&#xff09; 注&#xff1a;想要快速了解可以直接跳转到小程序视频展示&#xff08;手机用户可能打不开视频&#xff0c;电脑用户是可以打开视频的&#xff09;&#xff0c;手机用户可以打开我的主页里面…

系统运维(Kubernetes篇)

Kubernetes(k8s) 前言 ​ 在学习过程中&#xff0c;我们经常会遇到遗忘的问题。为了避免忘记&#xff0c;多复习是非常必要的。复习可以帮助我们巩固知识&#xff0c;加深记忆&#xff0c;提高学习效率。因此&#xff0c;我们应该养成良好的复习习惯&#xff0c;定期回顾所学…

猿创征文|“云“创新展望:数据之浩瀚

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; AWS–全球云计算领导者 AWS亚马逊云科技提供全球覆盖广泛、服务深入的云平台&#xff0c;全球数据中心提供超过 200 项功能齐全的服务 连续 11 年被 Gartner 评为&quo…