JavaScript

  • JS的2种引入方式
    • 直接在页面写
    • 在页面引入
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>快速入门</title>
</head>
<body>
<button id="btn">点我呀</button>

<!--引入js的方式一: 内部方式-->
<script type="text/javascript">
    document.getElementById("btn").onclick = function (){
        alert("点我干嘛")
    }
</script>
<script src="js/my.js"></script>
</body>
</html>

输入输出语句

  • 输入框
    • prompt(“提示内容”);
  • 弹出警告框
    • alert(“提示内容”);
  • 控制台输出
    • console.log(“显示内容”);
  • 页面内容输出
    • document.write(“显示内容”);
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>输入输出语句</title>
</head>
<body>

<script>
    /*
    * 输入框
    * prompt("提示内容");
    * 弹出警告框
    * alert("提示内容");
    * 控制台输出
    * console.log("显示内容");
    * 页面内容输出
    * document.write("显示内容");
    */
    prompt("请输入数据")

    alert("hello")

    console.log("打印logo")

    document.write("DaDaDa...")
    document.write("<br/>")
    document.write("DaDa")
    document.write("<h1>Hello</h1>")
</script>
</body>
</html>

变量和常量

  • JavaScrip属于弱类型语言, 定义变量时不区分具体的数据类型
  • 定义局部变量
    • let 变量名 = 值
  • 定义全局变量
    • 变量名 = 值;
  • 定义常量
    • const 常量名= 值
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>变量和常量</title>
</head>
<body>
<script>
  // 1. 定义局部变量

  let name = "张三";
  let age = 23;
  document.write(name+", "+ age)
  document.write("<br/>")

  // 2. 定义全局变量
  {
      let l1 = "aa";
      l2 = "bb";
  }
  // document.writeln(l1)
  document.writeln(l2)
  document.write("<br/>")

  // 3. 定义常量
  const PI = 3.1415926
  // PI = 3.15
  document.write(PI)
</script>
</body>
</html>

原始数据类型

数据类型  说明
boolean   布尔类型,true或false
null      声明null值的声明关键字
undefined 代表变量未定义
number    整数或浮点数
string    字符串
bigint    大整数,例如let num=10n;
  • typeof用于判断变量的数据类型
    • let age=18;
    • document.write(typeof(age)); //number
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>typeof方法</title>
</head>
<body>
<script>
    let l1 = true
    document.write(typeof (l1))
    document.write("<br/>")

    let l2 = null
    document.write(typeof (l2))
    document.write("<br/>")

    let l3
    document.write(typeof (l3))
    document.write("<br/>")

    let l4 = 10
    document.write(typeof (l4))
    document.write("<br/>")

    let l5 = "hello"
    document.write(typeof (l5))
    document.write("<br/>")

    let l6 = 100n
    document.write(typeof (l6))
    document.write("<br/>")

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

算数运算符

  • 算术运算符
运算符 说明
+      加法运算
-      减法运算
*      乘法运算
/      除法运算
%      取余数
++     自增
--     自减
  • 赋值运算符
运算符 说明
=      将箱封号右边的值赋值给箱封号左边的变量
+=     想回后赋值
-=     相减后赋值
*=     相乘后赋值
/=     相除后赋值
%=     取余数后赋值
  • 比较运算符
运算符 说明
== 判断值是否相等
=== 判断数据类型和值是否相等
> 大于
>= 大于等于
< 小于
<= 小于等于
!= 不等于
  • 逻辑运算符
运算符 说明
&&     逻辑与,并且
||     逻辑或,或者
!      取反
  • 三元运算符
    • 三元运算符格式
      • (比较表达式)?表达式1:表达式2;
    • 执行流程
      • 如果比较表达为true, 则取表达式1
      • 如果比较表达为false, 则取表达式2
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>运算符</title>
</head>
<body>
<script>
    let num = "10"
    // 和字符之间的+号, 拼接, 其他符号则把字符转成number运算
    document.write(num + 5)
    document.write("<br/>")
    document.write(num + "5")
    document.write("<br/>")
    document.write(num - 5)
    document.write("<br/>")
    document.write(num * 5)
    document.write("<br/>")

    let num2 = 10
    document.write(num == num2)
    document.write("<br/>")
    document.write(num === num2)
    document.write("<br/>")

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

JavaScrip的 流程控制和循环语句

  • if
  • switch
  • for
  • while
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>流程控制和循环语句</title>
</head>
<body>
<script>
    // if 语句
    let month = 10
    if(month >= 3 && month <= 5){
        document.write("春季")
    } else if( month >= 6 && month <= 6){
        document.write("夏季")
    } else if( month >= 9 && month <= 11) {
        document.write("秋季")
    } else if( month == 12 || month == 1 || month == 2) {
        document.write("冬季")
    } else  {
        document.write("月份有误")
    }

    document.write("<br/>")

    // switch 语句
    switch (month){
        case 3:
        case 4:
        case 5:
            document.write("春季")
            break
        case 6:
        case 7:
        case 8:
            document.write("夏季")
            break
        case 9:
        case 10:
        case 11:
            document.write("秋季")
            break
        case 12:
        case 1:
        case 2:
            document.write("冬季")
            break
        default:
            document.write("月份有误")
    }

    document.write("<br/>")

    // for
    for(let i=1;i<=5;i++){
        document.write(i+"<br/>")
    }

    // while
    let n =6
    while (n <= 10){
        document.write(n+"<br/>")
        n++
    }
</script>
</body>
</html>

数组

  • 数组的使用Java中的数据基本一致, 但是在JavaScript中的数据更加灵活, 数据类型和长度都没有限制
  • 定义格式
    • let 数组名 = [元素1,元素2,…];
  • 索引范围
    • 从0开始, 最大到数组长度-1
  • 数组长度
    • 数组名.length
  • 数组高级运算符…
    • 数组复制
    • 合并数组
    • 字符串转数组
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>数组</title>
</head>
<body>
<script type="text/javascript">
    // 定义数组
    let arr = [10,20,30]

    for(let i=0; i < arr.length; i++){
        document.write(arr[i])
        document.write("<br/>")
    }
    document.write("=======================<br/>")


    arr[3] = 40
    for(let i=0; i < arr.length; i++){
        document.write(arr[i])
        document.write("<br/>")
    }
    document.write("=======================<br/>")

    // 数组高级运算符: ...
    // 复制数组
    let arr2 = [...arr]

    for(let i=0; i < arr2.length; i++){
        document.write(arr2[i])
        document.write("<br/>")
    }
    document.write("=======================<br/>")

    // 合并数据
    let arr3 = [40,50,60];
    let arr4 = [...arr2,...arr3]
    for(let i=0; i < arr4.length; i++){
        document.write(arr4[i])
        document.write("<br/>")
    }

    for(var i of arr4){
        document.write(i)
        document.write("<br/>")
    }

    document.write("=======================<br/>")
    // 字符串转成数组
    let arr5 = [..."heima"]
    for(var i of arr5){
        document.write(i)
        document.write("<br/>")
    }

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

函数

  • 函数类似于java中的方法, 可以将一些代码进行抽取, 达到复用的效果
  • 定义格式
    • function 方法名(参数列表){方法体 return 返回值}
    • 有返回值, 可以写
    • 无返回值, 则不需要写
  • 可变参数
    • function 方法名(…参数名){ 方法体; return 返回值 }
  • 匿名函数
    • function(参数列表){ 方法体; }
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>函数</title>
</head>
<body>
<script >
    // 无参无返回值的函数
    function println(){
        document.write("Hello JS"+"<br/>")
    }
    println()

    // 有参 有返回值方法
    function getSum(num1,num2){
        return num1 + num2;
    }
    let sum = getSum(10,20);
    document.write(sum+"<br/>")

    // 可变参数, 对n个数字进行求和
    function getSum(...params){
        let ss = 0
        for(let i=0; i <params.length; i++){
            ss+=params[i]
        }
        return ss;
    }
    let sum2 = getSum(10,20, 20)
    document.write(sum2)


    // 匿名函数
    let fun = function(){
        document.write("hello")
    }
    fun()
</script>

</body>
</html>

DOM

  • DOM(Document Object Model):文档对象模型

  • 将HTML文档的各个组成部分, 封装为对象. 借助这些对象可以对HTML文档进行增删改查的动态操作

  • Document: 文档对象

    • Element: 元素对象
      • Attribute: 属性对象
        • Text: 文本对象
方法名                              说明
getElementById(id属性值)            根据id获得一个元素
getElementsByTagName(标签名称)      根据标签名称获得多个元素
getElementsByName(name属性值)       根据name属性获得多个元素
getElementsByClassName(class属性值) 根据class属性获得多个元素
子元素对象.parentElement属性        获取当前元素的父元素
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>元素的操作</title>
    <style>
        .cls{
            border: 1px solid red;
        }
    </style>
</head>
<body>
<div id="div1">div1</div>
<div id="div2">div2</div>
<div class="cls">div3</div>
<div class="cls">div4</div>
<input type="text" name="username"/>

<script>
    // 1. getElementById(id属性值)            根据id获得一个元素
    var div1 = document.getElementById("div1");
    // alert(div1)
    console.log(div1.innerHTML)

    // 2. getElementsByTagName(标签名称)      根据标签名称获得多个元素
    var divs = document.getElementsByTagName("div");
    // alert(divs.length)
    for(var i of divs){
        console.log(i.innerHTML)
    }

    // 3. getElementsByName(name属性值)       根据name属性获得多个元素
    var nameEs = document.getElementsByName("username");
    alert(nameEs.length)
    for(let e of nameEs){
        console.log(e.getAttribute("type"))
    }

    // 4. getElementsByClassName(class属性值) 根据class属性获得多个元素
    var clsE = document.getElementsByClassName("cls");
    // alert(clsE.length)
    for(let e of clsE){
        console.log(e.innerHTML)
    }

    // 5. 子元素对象.parentElement属性        获取当前元素的父元素
    var parentElement = div1.parentElement;
    console.log(parentElement.tagName)

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

Element 元素的操作

方法名                      说明
createElement(标签名)       创建一个新元素
appendChild(子元素)         将指定子元素添加到父元素中
removeChild(子元素)         父元素删除指定子元素
replaceChild(新元素,旧元素) 用新元素替换子元素
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>元素的操作</title>
</head>
<body>
<select id="s">
    <option>---请选择---</option>
    <option>北京</option>
    <option>上海</option>
    <option>广州</option>
</select>

<script>
    // 1. createElement() 创建元素
    var sz = document.createElement("option");
    // 为option添加文本内容
    sz.innerHTML = "深圳"

    // 2. appendChild(子元素)         将指定子元素添加到父元素中
    var select = document.getElementById("s");
    select.appendChild(sz)

    // 3. removeChild(子元素)         父元素删除指定子元素
    // select.removeChild(sz)

    // 4. replaceChild(新元素,旧元素) 用新元素替换子元素
    var hz = document.createElement("option");
    hz.innerHTML = "杭州"
    select.replaceChild(cq,sz)

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

Attribute 属性的操作

方法名                      说明
setAtrribute(属性名,属性值) 设置属性
getAtrribute(属性名)        根据属性名获取属性值
removeAtrribute             根据属性名先锋队指定的属性
style属性                   为元素添加样式
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>属性的操作</title>
  <style>
    .acolor{
      color: #1c1ccb;
    }
  </style>
</head>
<body>
<a>点我呀</a>
<script>
    // 1. setAtrribute(属性名,属性值) 设置属性
    var a = document.getElementsByTagName("a")[0];
    a.setAttribute("href","https://baidu.com")

    // 2. getAtrribute(属性名)        根据属性名获取属性值
    var value = a.getAttribute("href");
    // alert(value)

    // 3. removeAtrribute             根据属性名先锋队指定的属性
    a.removeAttribute("href")

    // 4. style属性                   为元素添加样式
    // a.style.color = "red"

    // 5. className 属性 添加指定样式
    a.className = "acolor"

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

Text 文本的操作

属性名    说明
innerText 添加文本内容,不解析标签
innerHTML 添加文本内容,解析标签
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文本的操作</title>
</head>
<body>

<div id="div"></div>
<script>
    // 1. innerText 添加文本内容, 不解析标签
    var div = document.getElementById("div");
    div.innerText = "<h1>这是div</h1>"

    // 2. innerHTML 添加文本内容, 解析标签
    div.innerHTML = "<h1>这也是DIV</h1>"
</script>
</body>
</html>

事件

  • 事件指的就是当某些组件执行了某些操作后, 会触发某些代码的执行
事件名     说明
onload     某个页面或图像被完成加载
onsubmit   当表单提交时触发该事件
onclick    鼠标赣南事件
ondblclick 鼠标双击事件
onblur     元素失去售点
onfocus    元素获得售点
onchange   用户改变域的内容
  • 了解的事件
事件名      说明
onkeydown   某个键盘的键被按下
onkeypress  某个键盘的键被按下或按住
onkeyup     某个键盘的键被松开
onmousedown 某个鼠标按钮被按下
onmouseup   某个鼠标按钮被李嘉琪
onmouseover 鼠标被移到某元素之上
onmouseout  鼠标从某元素移开

绑定事件

  • 方式一
    • 通过标签中的事件属性进行绑定
    • button id=“btn” onclick=“执行的功能”>
  • 方式二
    • 通过DOM元素属性绑定
    • document.getElementById(“btn”).onclick=执行的功能
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件</title>
</head>
<body>
<div align="center">
<img id="img" width="80%" height="800px" src="img/p1.jpg" />
<br/>
<button id="up" onclick="up()">上一张</button>
<button id="down">下一张</button>
</div>

<script>

    // var btnup = document.getElementById("up");

    var btndown = document.getElementById("down");

    function up(){
        let img = document.getElementById("img")
        img.setAttribute("src","img/p1.jpg")
    }

    function down(){
        let img = document.getElementById("img")
        img.setAttribute("src","img/p2.jpg")
    }

    btndown.onclick = down()

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

综合案例

  • appendChild
  • append支持添加多个Child了
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>综合案例</title>
    <style>

        a{
            color: blue;
        }
        table,table tr th, table tr td {
            border:1px solid black;
        }
    </style>
</head>
<body>
<div align="center">
    <div id="divinput" >
        <input type="text" id="name" placeholder="请输入姓名" autocomplete="off">
        <input type="text" id="age" placeholder="请输入年龄" autocomplete="off">
        <input type="text" id="gender" placeholder="请输入姓名" autocomplete="off" >
        <input type="button" id="add" value="添加" onclick="add()" >
    </div>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <div >
        <a style="color: black;">学生信息表</a>
        <table style="width: 300px; border: 1px solid black" >
            <thead>
            <tr>
                <th>姓名</th>
                <th>年龄</th>
                <th>性别</th>
                <th>操作</th>
            </tr>
            </thead>
            <tbody id="tbody" >
            <tr>
                <td>张三</td>
                <td>23</td>
                <td>男</td>
                <td><a href="JavaScript:void(0);" onclick="deleteTr(this)">删除</a></td>
            </tr>
            <tr>
                <td>王五</td>
                <td>25</td>
                <td>女</td>
                <td><a href="JavaScript:void(0);"  onclick="deleteTr(this)">删除</a></td>
            </tr>
            </tbody>
        </table>
    </div>
</div>
<script>

    function deleteTr(obj){
        let tbody = obj.parentElement.parentElement.parentElement
        let tr = obj.parentElement.parentElement;
        tbody.removeChild(tr)
    }
    function add(){
        let tr = document.createElement("tr");

        let tdName = document.createElement("td");
        let tdAge = document.createElement("td");
        let tdGender = document.createElement("td");
        let tdDel = document.createElement("td");

        tr.appendChild(tdName)
        tr.appendChild(tdAge)
        tr.appendChild(tdGender)
        tr.appendChild(tdDel)

        let nameText = document.getElementById("name").value
        let ageText = document.getElementById("age").value
        let genderText = document.getElementById("gender").value

        tdName.innerText = nameText
        tdAge.innerText = ageText
        tdGender.innerText = genderText

        let a = document.createElement("a")
        let aText = document.createTextNode("删除")
        a.setAttribute("href","JavaScript:void (0);")
        a.setAttribute("onclick", "deleteTr(this)")
        a.appendChild(aText)
        tdDel.appendChild(a)

        let tbody = document.getElementById("tbody");

        tbody.appendChild(tr);

        // append 支持多参数了

        // let name = document.getElementById("name");
        // let age = document.getElementById("age");
        // let gender = document.getElementById("gender");
        //
        // let tr = document.createElement("tr");
        // let tdname = document.createElement("td");
        // tdname.innerText = name.value
        // let tdage = document.createElement("td");
        // tdage.innerText = age.value
        // let tdgender = document.createElement("td");
        // tdgender.innerText = gender.value
        //
        // let tddel = document.createElement("td");
        // tddel.innerHTML = "<a href=\"JavaScript:void(0);\" onclick=\"deleteTr()\">删除</a>"
        //
        // tr.append(tdname,tdage,tdgender,tddel);
        //
        // let tbody = document.getElementById("tbody");
        //
        // tbody.append(tr);
    }

</script>

</body>
</html>