09_js

JS

概念

  • JavaScript 是一种轻量级的编程语言
    • 轻量级: js
    • 重量级: Java, C++, C#
  • JavaScript 是可插入 HTML 页面的编程代码
  • JavaScript是一种弱类型语言
    • 比如Java就是强类型,所有变量定义都需要明确的类型定义
  • 主要用来向HTML页面添加交互行为

HTML、CSS、JS的关系

  • HTML主要负责页面的搭建
    • 比如页面上文字的展示,图片,输入框等元素
  • CSS主要负责页面的美化
    • 比如文字的大小调整,图片大小,各种样式
  • JS主要负责页面的交互
    • 比如点击一个按钮后弹框等

在HTML中引入JS的方式

方式一:内部引入

  • 在html页面中, 用一个script标签包裹,直接写js代码
  • 可以在head标签内部,也可以在body内部,也可以在body后
  • 一般是在body标签的结尾前

eg:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div>
    这是div
</div>

<!--可以在页面的任意地方去写script标签
    一般放在body结束的前面
-->

<script>
    alert("123")
</script>

</body>
</html>

方式二:外部引入

  • 创建js文件,在html页面上引入js文件

  • 在head标签内部,添加script标签

eg:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <script src="./js_test.js"></script>
</head>
<body>

</body>
</html>

js的变量

变量声明

JavaScript在声明时统一使用无类型(untyped)的"var"关键字

  • var来声明一个变量,这是一个固定的写法,是js的语法
  • JavaScript并没有避开数据类型,它的数据类型是根据所赋值的类型来确定的
  • JavaScript 变量区分大小写

eg:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<script>
    // 直接使用var来定义变量
    var num = 123;

    /* 语法比较松散*/
    // 可以对定义好的变量进行重新赋值
    num = "helloworld"

    alert(num)
</script>

</body>
</html>

命名规范:保持跟Java一致


变量类型

  • String
  • Number
  • Boolean
  • 数组
    • var cars=["hello", "hi", "nihao"];
  • 对象
    • var person={firstname:"Bill", lastname:"Gates", id:5566};

不要使用变量类型,了解即可


JS中的方法

js中方法的定义

function 方法名(){

// 方法体

}

eg:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<!-- onclick = js方法名()-->
<button onclick="deleteNum()">按钮</button>

<button onclick="deleteNum1(111)">按钮</button>

<!-- 要注意html里面的元素,怎么和js联动-->

<script>
    function deleteNum(){
        alert(123);
    }

    /*可以传递参数,参数不用var去接,直接写变量名即可*/
    function deleteNum1(num){
        alert(num);
    }
</script>

</body>
</html>

运算符

算数运算符

+, -, *, /, %, ++, --

=, +=, -=, *=, /=, %=

与Java之间的差异
对待减法,如果是字符串 - 数字,会首先尝试将字符串转换为数字,然后计算。如果转化失败,会返回NaN。

eg:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<script>
    var str = "15";
    var num = 5;

    // 字符串和普通数字做加法,其实是做了一个拼接
    console.log(str + num);

    // 首先把str尝试转成数字
    // 如果没转成功,则会返回一个NaN
    // 任何数字和NaN计算都是NaN
    console.log(str - num);

    var str = "str";
    console.log(str - num);
</script>

</body>
</html>

在这里插入图片描述

逻辑运算符

 > , <, >=, <=, ? : 三元

&& , ||, !

==, ===, !=, !==

注:

  • == : 只判断值是否相等
  • === : 不仅仅判断值, 还要判断类型
  • != : 只判断值是否不相等
  • !== : 不仅仅判断值, 还要判断类型

逻辑分支语句

if

  • 在js中很多东西都可以充当if-else的条件
  • 但是有些东西默认表现为假: 0, 空字符串, null, NaN, false, undefined

break 语句用于跳出循环
continue 用于跳过循环中的一个迭代

for

一般我们使用普通的fori循环用来遍历数组, 一般我们使用foreach循环遍历对象

eg:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<script>
    var object = {name: "Jack", age: 25, address: "China"};

    for(var obj in object){
        console.log(obj + " ---- " + object[obj]);
    }

    var array = [1, 2, "hello", false];
    for (let i = 0; i < array.length; i++) {
        console.log(array[i]);
    }
</script>

</body>
</html>

核心对象/类型

Number

  • toString() 以字符串返回数值

  • toFixed() 返回字符串值,它包含了指定位数小数的数字(四舍五入)

  • toPrecision() 返回字符串值,它包含了指定长度的数字

  • parseInt() 允许空格。只返回首个数字

eg:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<script>
  var num = 12345678;

  var smallNum = 3.1415;

  console.log(num.toString()); // 12345678

  console.log(smallNum.toFixed(3)); // 3.142

  console.log(smallNum.toPrecision(3)); // 3.14

  console.log(parseInt(1234)); // 1234
</script>

</body>
</html>

String

  • length :属性返回字符串的长度

  • indexOf()返回字符串中指定文本首次出现的索引(位置)

    • 不存在返回-1

    • // 头一个China返回的下标
      str.indexOf("China");
      
      // 从28开始,找往后的China的下标
      str.indexOf("China", 28);
      
  • slice()提取字符串的某个部分并在新字符串中返回被提取的部分

  • split()将字符串转换为数组

Array

  • toString() 返回数组转换的数组值(逗号分隔)的字符串。
  • pop() 方法从数组中删除最后一个元素,返回删除的元素
  • push() 方法(在数组结尾处)向数组添加一个新的元素,返回数组长度
  • splice()
    • 删除指定位置开始的指定个元素。fruits.splice(2, 2);
    • 方法可用于向数组添加新项, 返回([])。fruits.splice(2, 0, "Lemon", "Kiwi");
  • sort() 方法以字母顺序对数组进行排序,返回值和原数组是经过排序的数组
  • reverse() 方法反转数组中的元素。返回值和原数组都变为经过反转数组

eg:

// toString() 返回数组转换的数组值(逗号分隔)的字符串。
var fruits = ["Banana", "Orange", "Apple", "Mango"];
console.log(fruits.toString()); //Banana,Orange,Apple,Mango

// pop() 方法从数组中删除最后一个元素,返回删除的元素
fruits.pop();              // 从 fruits 删除最后一个元素("Mango")
var x = fruits.pop();      // x 的值是 "Mango"

// push() 方法(在数组结尾处)向数组添加一个新的元素,返回数组长度
fruits.push("Kiwi");       //  向 fruits 添加一个新元素

// splice() 方法可用于向数组添加新项, 返回([])
  
fruits.splice(2, 0, "Lemon", "Kiwi");
// 第一个参数:添加新元素的起始位置。第二个参数:定义应删除多少元素。
// 其余参数(“Lemon”,“Kiwi”)定义要添加的新元素。

// sort() 方法以字母顺序对数组进行排序,返回值和原数组是经过排序的数组
fruits.sort();            // 对 fruits 中的元素进行排序

// reverse() 方法反转数组中的元素。返回值和原数组都变为经过反转数组
fruits.reverse();            // 对 fruits 中的元素进行排序

Math

  • Math.ceil(x)返回大于等于x的最小整数

  • Math.floor(x)返回小于等于x的最大整数

  • Math.random() 返回 0 ~ 1 之间的随机数

  • Math.round(x) 把一个数四舍五入为最接近的整数

  • Math.max(x,y,z,...,n) 返回最高值

  • Math.min(x,y,z,...,n) 返回最低值


DOM

文档对象模型(Document Object Model,简称DOM)

  • DOM的加载顺序: 指的就是浏览器获得了一份html代码之后, 从获得代码到显示的过程

  • 解析HTML结构(从上向下的过程),一边解析, 一边构建dom树结点/节点

    • 加载外部脚本和样式表文件,异步加载外部的css和js文件
    • 解析并执行脚本代码

eg:
在这里插入图片描述

在DOM树中获取结点

  • getElementById():根据id获取一个结点
  • getElementsByName():根据name属性, 获取所有对应name结点的集合
  • getElementsByTagName():根据标签名, 获取所有对应标签结点的集合

其中

  • getElementById() 返回的是一个节点
  • getElementsByName(),getElementsByTagName() 返回的是一个集合

eg:

<div id="div1">
    div1
</div>

<div id="div2" name="div2222">
    div2
</div>


<script>
    // element是指定的id 的div块
    let element = document.getElementById("div1");
    console.log(element)

    // 获取的是一个集合。 获取了两个div块
    let elementsByTagName = document.getElementsByTagName("div");
    console.log(elementsByTagName[0])
    console.log(elementsByTagName[1])

    // 获取的是一个div集合,只有一个 是div2
    let elementsByName = document.getElementsByName("div2222");
    console.log(elementsByName)

</script>

在DOM树中添加结点

  • appendChild: 给某个结点添加一个孩子(孩子也应该是一个结点。注意类型 )
  • 比如:
    • 要添加一个li类型的节点,需要使用以下方式: document.createElement("li")
    • 要添加文本类型的节点: document.createTextNode("zs")

eg:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

    <ul id = "ul_1">
        <li>water</li>
        <li>coke</li>
        <li>juice</li>
        <li>milk</li>
    </ul>

    <input id = "input_1">

    <button onclick="addElem()">添加元素</button>

</body>

<script>

    function addElem(){
        var inputNode = document.getElementById("input_1")
        var inputStr = inputNode.value


        var ulNode = document.getElementById("ul_1")

        // 创建一个文本结点
        var textNode = document.createTextNode(inputStr)

        // 创建一个li类型的结点对象
        // document.createElement创建一个指定类型的结点
        var liNode = document.createElement("li")

        liNode.appendChild(textNode)

        // appendChild 给某个结点添加孩子
        // 参数是一个孩子'结点'
        ulNode.appendChild(liNode)

        inputNode.value = ""
    }


</script>
</html>

在DOM树中删除结点

  • removeChild: 给某个结点删除其一个孩子(注意:参数是要删除的孩子 )

  • 注意输入的参数,是一个children类型的

eg:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


    <ul id = "ul_1">
        <li>water</li>
        <li>coke</li>
        <li>juice</li>
        <li>milk</li>
    </ul>

    添加元素的名称:<input id = "input_1">

    <button onclick="addElem()">添加元素</button>

    <br>

    删除元素的下标:<input id="inputstr">

    <button onclick="deleteli()">删除元素</button>

</body>

<script>

    function addElem(){
        var inputNode = document.getElementById("input_1")
        var inputStr = inputNode.value


        var ulNode = document.getElementById("ul_1")

        // 创建一个文本结点
        var textNode = document.createTextNode(inputStr)

        // 创建一个li类型的结点对象
        // document.createElement创建一个指定类型的结点
        var liNode = document.createElement("li")

        liNode.appendChild(textNode)

        // appendChild 给某个结点添加孩子
        // 参数是一个孩子'结点'
        ulNode.appendChild(liNode)

        inputNode.value = ""
    }


    function deleteli(){
        var index = document.getElementById("inputstr").value
        var ulNode = document.getElementById("ul_1")

        // childNodes: 专门用来获得一个结点的所有孩子
        var childNodes = ulNode.childNodes;


        // removeChild: 给某个结点删除其一个孩子
        //  参数要删除的孩子
        ulNode.removeChild(childNodes[index])
    }


</script>
</html>

在DOM树中修改结点

  • replaceChild: 给某个结点替换孩子结点

  • 第一个参数: 新孩子;第二个参数: 旧孩子

eg:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


    <ul id = "ul_1">
        <li>water</li>
        <li>coke</li>
        <li>juice</li>
        <li>milk</li>
    </ul>

    添加元素的名称:<input id = "input_1">

    <button onclick="addElem()">添加元素</button>

    <br>

    删除元素的下标:<input id="inputstr">

    <button onclick="deleteli()">删除元素</button>

    <br>

    修改元素的下标: <input id="inputtag">
    替换内容: <input id="inputstrNew">
    <button onclick="changeli()">替换</button>

</body>

<script>

    function addElem(){
        var inputNode = document.getElementById("input_1")
        var inputStr = inputNode.value


        var ulNode = document.getElementById("ul_1")

        // 创建一个文本结点
        var textNode = document.createTextNode(inputStr)

        // 创建一个li类型的结点对象
        // document.createElement创建一个指定类型的结点
        var liNode = document.createElement("li")

        liNode.appendChild(textNode)

        // appendChild 给某个结点添加孩子
        // 参数是一个孩子'结点'
        ulNode.appendChild(liNode)

        inputNode.value = ""
    }


    function deleteli(){
        var index = document.getElementById("inputstr").value
        var ulNode = document.getElementById("ul_1")

        // childNodes: 专门用来获得一个结点的所有孩子
        var childNodes = ulNode.childNodes;


        // removeChild: 给某个结点删除其一个孩子
        //  参数要删除的孩子
        ulNode.removeChild(childNodes[index])
    }

    function changeli() {
        var inputTag = document.getElementById("inputtag").value
        var inputStr = document.getElementById("inputstrNew").value

        var ulNode = document.getElementById("ul_1")

        var childNodes = ulNode.childNodes;

        var changeNode = childNodes[inputTag]

        // console.log(changeNode)

        // replaceChild: 给某个结点替换孩子结点
        // 第一个参数:  新孩子
        // 第二个参数:  旧孩子
        changeNode.replaceChild(document.createTextNode(inputStr), changeNode.childNodes[0])
    }



</script>
</html>

inner

  • innerText: 会按照text全部放入

  • innerHTML: 会按照html解析。比如一些标签等

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coo1heisenberg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值