博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

04javascript02

Posted on 2019-01-04 15:39  心默默言  阅读(131)  评论(0编辑  收藏  举报

1.BOM

1.1概念

Browser Object Model 浏览器对象模型

将浏览器的各个组成部分封装成对象。

1.2.组成   

Window:窗口对象
Navigator:浏览器对象
Screen:显示器屏幕对象
History:历史记录对象
Location:地址栏对象

1.3Window窗口对象

1. 创建
2. 方法
  1. 与弹出框有关的方法:
    alert() 显示带有一段消息和一个确认按钮的警告框。
    confirm() 显示带有一段消息以及确认按钮和取消按钮的对话框。
      如果用户点击确定按钮,则方法返回true
      如果用户点击取消按钮,则方法返回false
    prompt() 显示可提示用户输入的对话框。
      返回值:获取用户输入的值

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        alert("hello world");
        window.alert("你好世界");
        var flag = confirm("确定退出吗?");
        alert(flag)
        if(flag){
            alert("再见");
        }else {
            alert("欢迎再次光临");
        }
        var name = prompt("请输入用户名");
        alert(name);
    </script>
</head>
<body>
    
</body>
</html>

  2. 与打开关闭有关的方法:
    close() 关闭浏览器窗口。
      谁调用我 ,我关谁
    open() 打开一个新的浏览器窗口
      返回新的Window对象3. 与定时器有关的方式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <input id="openBtn" type="button" value="打开窗口">
    <input id="closeBtn" type="button" value="关闭窗口">
    <script>
        var openBtn = document.getElementById("openBtn");
        var newWindow;
        openBtn.onclick = function () {
            newWindow = open("https://www.baidu.com");
        };

        var closeBtn = document.getElementById("closeBtn");
        closeBtn.onclick = function () {
            newWindow.close();
        };
    </script>
</body>
</html>

  3.与定时器有关的方法

    setTimeout() 在指定的毫秒数后调用函数或计算表达式。
      参数:
        1. js代码或者方法对象
        2. 毫秒值
      返回值:唯一标识,用于取消定时器
    clearTimeout() 取消由 setTimeout() 方法设置的 timeout。

    setInterval() 按照指定的周期(以毫秒计)来调用函数或计算表达式。
    clearInterval() 取消由 setInterval() 设置的 timeout。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <script>
        //一次性定时器
        // setTimeout("fun();",3000);
        //或者下面这种写法
        var timeout = setTimeout(fun,3000);
        function fun() {
            alert("boom~~~");
        }

        //循环定时器
        var interval = setInterval(fun,2000);

        //取消定时器
        clearTimeout(timeout);
        
        //取消循环定时器
        clearInterval(interval);
    </script>
</body>
</html>

 

  4.案例:轮播图

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

</head>
<body>
    <img id="img" src="img/banner_1.jpg" width="100%">

    <script>
        /*分析
         1.在页面上使用img标签展示图片
         2.定义一个方法修改图片的src
         3.定义一个定时器,每隔三秒调用方法一次
         */

        //修改图片src属性
        var number = 1;

        function fun() {
            number++;
            //判断number是否大于3
            if (number > 3)
                number = 1;
            var img = document.getElementById("img");
            img.src = "img/banner_" + number + ".jpg";
        }

        //定义定时器
        setInterval(fun,3000);

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

3. 属性:
  1. 获取其他BOM对象:
    history
    location
    Navigator
    Screen:
  2. 获取DOM对象
    document
4. 特点
  Window对象不需要创建可以直接使用 window使用。 window.方法名();
  window引用可以省略。 方法名();

1.4Location:地址栏对象

1. 创建(获取):

  1. window.location

  2. location

2. 方法:

  reload()重新加载当前文档。刷新

3. 属性

  href设置或返回完整的 URL。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <input type="button" id="btn" value="刷新">
    <input type="button" id="goBaidu" value="去百度">
    <script>
        //reload方法,定义一个按钮,点击按钮,刷新当前页面
        //1.获取按钮
        var btn = document.getElementById("btn");
        //2.绑定单击事件
        btn.onclick = function () {
            //3.刷新页面
            location.reload();
        };

        //获取href
        var href = location.href;
        // alert(href);
        var goBaidu = document.getElementById("goBaidu");
        goBaidu.onclick = function () {
            location.href = "https://www.baidu.com";
        };

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

案例倒数数秒定时跳转:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        p {
            text-align: center;
        }

        span {
            color: red;
        }
    </style>

</head>
<body>
    <p>
        <span id="time">5</span>秒之后,自动跳转到首页...
    </p>

    <script>
        /*
        分析:
            1.显示页面效果 <p>
            2.秒数倒计时
                2.1定义一个方法,获取span标签,获取span标签体内容,time--;
                2.2定义一个定时器,一秒执行一次该方法。
            3.在方法中判断,时间如果小于0,则跳转到首页
         */
        var second = 5;
        var time = document.getElementById("time");

        function showTime() {
            second--;
            if (second <= 0) {
                location.href = "https://www.baidu.com";
            }
            time.innerHTML = second + "";
        }

        //设置定时器,1秒执行一次该方法
        setInterval(showTime, 1000);

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

1.5History:历史记录对象

1. 创建(获取):

  1. window.history

  2. history

2. 方法:

  back()加载 history 列表中的前一个 URL。

  forward()加载 history 列表中的下一个 URL。

  go(参数)加载 history 列表中的某个具体页面。

  参数:

    正数:前进几个历史记录

    负数:后退几个历史记录

3. 属性:

  length返回当前窗口历史列表中的 URL 数量。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <input type="button" id="btn" value="获取历史记录个数">
    <input type="button" id="forward" value="前进">
    <a href="06自动跳转案例.html">06页面</a>
    <script>
        //1.获取按钮
        var btn = document.getElementById("btn");
        //2.绑定单机事件
        btn.onclick = function () {
            //3.获取当前窗口历史记录个数
            var length = history.length;
            alert(length);
        };

        //1.获取按钮
        var forward = document.getElementById("forward");
        //2.绑定单机事件
        forward.onclick = function () {
            history.forward();
        }

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

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1.BOM编程

1.1入门

BOM就是浏览器对象模型编程,通过javascript引擎提供的四个浏览器对象,操作浏览器,这叫BOM编程。

1.2window对象(重点)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>window对象</title>
    <script type="text/javascript">
        /*
     open(): 在一个窗口中打开页面

     setInterval(): 设置定时器(执行n次)
     setTimeout(): 设置定时器(只执行1次)
     clearInterval(): 清除定时器
     clearTimeout(): 清除定时器

     alert(): 提示框
     confirm(): 确认提示框
     propmt(): 输入提示框

     注意:
         因为window对象使用非常频繁,所以当调用js中的window对象的方法时,可以省略对象名不写。
    */
        function testOpen() {
            /*
            参数一: 打开的页面
            参数二:打开的方式。 _self: 本窗口  _blank: 新窗口(默认)
            参数三: 设置窗口参数。比如窗口大小,是否显示任务栏
            */
            window.open("http://www.baidu.com", "width=300px;height=300px;toolbar=0")
        }

        let taskId;

        function testInterval() {
            /*
            定时器: 每隔n毫秒调用指定的任务(函数)
            参数一:指定的任务(函数)
            参数二:毫秒数
            */
            taskId = window.setInterval("testOpen()", 3000)
        }

        function testClearInterval() {
            /*清除任务
            参数一:需要清除的任务ID
            */
            window.clearInterval(taskId);
        }

        let toId;

        function testTimeout() {
            /*设置定时任务*/
            toId = window.setTimeout("testOpen()", 3000);
        }

        function testClearTimeout() {
            window.clearTimeout(toId);
        }

        function testAlert() {
            window.alert("提示框");
        }

        function testConfirm() {
            /*
            返回值就是用户操作
                true: 点击了确定
                false: 点击了取消
            */
            let flag = window.confirm("确认删除吗?一旦删除不能恢复,请慎重!");
            if (flag) {
                alert("确定删除,正在删除中....");
            } else {
                alert("取消了操作");
            }
        }
        function testPrompt(){
        /*
        输入提示框
        */
        let flag = window.prompt("请输入你的U顿密码");
        if(flag){
            alert("密码正确,转账中...");
        }else{
            alert("取消了操作");
        }
    }
    </script>
</head>
<body>
<input type="button" value="open()" onclick="testOpen()"/>
<input type="button" value="setInteval()" onclick="testInterval()"/>
<input type="button" value="clearInteval()" onclick="testClearInterval()"/>
<input type="button" value="setTimeout()" onclick="testTimeout()"/>
<input type="button" value="clearTimeout()" onclick="testClearTimeout()"/>
<input type="button" value="alert()" onclick="testAlert()"/>
<input type="button" value="confirm()" onclick="testConfirm()"/>
<input type="button" value="prompt()" onclick="testPrompt()"/>

</body>
</html>

1.3location对象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>location对象</title>
    <script type="text/javascript">
    /*
    href属性: 代表的是地址栏的URL,可以获取和设置URL。URL表示统一资源定位符

    reload方法: 刷新当前页面

    */
    function testHref(){
        //alert(window.location.href);
        /*
            通过修改location对象的href属性来实现页面的跳转
        */
        window.location.href="http://www.baidu.com";
    }

    function testReload(){
        //刷新当前页面
        window.location.reload();
    }

    // function testRefresh(){
        //定时刷新
        window.setTimeout("testReload()",1000);
    // }
 
</script>
</head>
<body>
<input type="button" value="跳转" onclick="testHref()"/>
<input type="button" value="实现定时刷新" onclick="testRefresh()"/>

</body>
</html>

1.4history对象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>history对象</title>
    <script type="text/javascript">
    /*
        forward(): 前进到下一页
        back(): 后退上一页
        go(): 跳转到某页(正整数:前进  负整数:后退)  1   -2
    */
    function testForward(){
        //window.history.forward();
        window.history.go(1);
    }
</script>
</head>
<body>
<a href="17history对象2.html">跳转到下一个页面</a>
<br/>
<input type="button" value="前进" onclick="testForward()"/>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>history对象</title>
    <script type="text/javascript">
    function testBack(){
        //window.history.back();
        window.history.go(-1);
    }
</script>
</head>
<body>
目标页面<br/>
<input type="button" value="后退" onclick="testBack()"/>
</body>
</html>

1.5screen对象

screen对象代表是一个屏幕

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>screen对象</title>
    <script type="text/javascript">
        /*
            availHeight和availWidth是排除了任务栏之后的高度和宽度
        */
        document.write(window.screen.availWidth + "<br/>");
        document.write(window.screen.availHeight + "<br/>");
        document.write(window.screen.width + "<br/>");
        document.write(window.screen.height + "<br/>");

    </script>
</head>
<body>

</body>
</html>

2.事件编程

2.1 回顾javase的事件编程

GUI编程事件三个要素:

事件源: 按钮JButton JFrame

事件:KeyEvent   WindowEvent

监听器:KeyListener  WindowListener

 GUI编程具体的步骤:

1)创建事件源               

2)编程监听器

3)在事件源上注册监听器

javascript事件编程的三个要素:

1)事件源:html标签

2)事件 :click dblclick mouseover。。。。

3)监听器: 函数

 javascript事件分类:

点击相关的:

单击: onclick

双击: ondblclick

焦点相关的:

聚焦:  onfocus

失去焦点: onblur

选项相关的:

改变选项: onchange

 鼠标相关的:

鼠标经过: onmouseover

鼠标移除: onmouseout

 页面加载相关的:

页面加载: onload

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件编程</title>
    <!-- 2)编程监听器(函数) -->
    <script type="text/javascript">
        function test() {
            alert("触发了事件");
        }
    </script>
</head>

<body>
<!-- 1)事件源-->
<input type="button" value="按钮" onclick="test()"/><!-- 3)注册监听器(函数)-->
</body>
</html>

2.2事件分类

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件分类</title>
    <style type="text/css">
        #div1 {
            width: 100px;
            height: 100px;
            background: #00F;
        }
    </style>
    <script type="text/javascript">
        /*
    点击相关的:
            单击: onclick
            双击: ondblclick

    焦点相关的:
            聚焦:  onfocus
            失去焦点: onblur

    选项相关的:
            改变选项: onchange

    鼠标相关的:
            鼠标经过: onmouseover
            鼠标移除: onmouseout

    页面加载相关的:
            页面加载: onload  这个事件是在加载完标签后再触发。通用用在body标签中,所以加载完body标签的内容触发。
    */
        function testClick() {
            alert("触发了单击事件");
        }

        function testDblClick() {
            alert("触发了双击事件");
        }

        function testFocus() {
            userName = document.getElementById("userName");
            userName.value = "";
        }

        function testBlur() {
            //获取用户输入内容
            userName = document.getElementById("userName").value;
            //检查用户是否存在
            //显示内容到span
            //获取到span
            userNameTip = document.getElementById("userNameTip");
            if (userName == "eric") {
                userNameTip.innerHTML = "用户已经被占用,请更改!".fontcolor("red");
            } else {
                userNameTip.innerHTML = "恭喜你,该用户可用!".fontcolor("green");
            }
        }

        function testChange() {
            //alert("选项改变了");
            //获取选中的内容
            jiguan = document.getElementById("jiguan").value;
            //alert(jiguan);
            city = document.getElementById("city");
            //每次先清空城市select的内容
            city.innerHTML = "";
            if (jiguan == "广东") {
                //把一些option选项放入到城市的select中
                arr = ["广州", "珠海", "深圳"];

                for (let i = 0; i < arr.length; i++) {
                    city.innerHTML += "<option value='" + arr[i] + "'>" + arr[i] + "</option>";
                }
            }
            if (jiguan == "广西") {
                //把一些option选项放入到城市的select中
                arr = ["柳州", "桂林", "南宁"];
                for (i = 0; i < arr.length; i++) {
                    city.innerHTML += "<option value='" + arr[i] + "'>" + arr[i] + "</option>";
                }
            }
            if (jiguan == "湖南") {
                //把一些option选项放入到城市的select中
                arr = ["长沙", "湘潭", "郴州"];
                for (i = 0; i < arr.length; i++) {
                    city.innerHTML += "<option value='" + arr[i] + "'>" + arr[i] + "</option>";
                }
            }
        }

        function testOver() {
            alert("鼠标经过了div");
        }

        function testOut() {
            alert("鼠标移除了dvi");
        }

        // function testLoad() {
        //     alert("触发了onload方法");
        // }
    </script>
</head>
<body>
<input type="button" value="单击" onclick="testClick()"/>
<input type="button" value="双击" ondblclick="testDblClick()"/>
<hr/>
请输入用户名:<input type="text" id="userName" value="4-12位字母或数字"
              onfocus="testFocus()" onblur="testBlur()"/><span id="userNameTip"></span>
<hr/>
请选择籍贯
<!--onchange :表示这个select中的选项发送改变 -->
<select onchange="testChange()" id="jiguan">
    <option value="广东">广东</option>
    <option value="广西">广西</option>
    <option value="湖南">湖南</option>
</select>
城市
<select id="city">
</select>
<hr/>
<div id="div1" onmouseover="testOver()" onmouseout="testOut()"></div>
</body>
</html>

3.DOM和事件简单学习

3.1DOM

功能:控制html文档的内容
代码:获取页面标签(元素)对象:Element
  document.getElementById("id值"):通过元素的id获取元素对象

 操作Element对象:

  1.设置属性值

    1. 明确获取的对象是哪一个?
    2. 查看API文档,找其中有哪些属性可以设置

  2.修改标签体内容

    属性:innerHTML
    1. 获取元素对象
    2. 使用innerHTML属性修改标签体内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <!-- <img id="light" src="img/1.jpg">
     <script>
         var light = document.getElementById("light");
         alert("我要换图片了。。");
         light.src="img/2.jpg";
     </script>-->

    <img id="light" src="img/1.jpg">
    <h1 id="title">你哈哈哈哈</h1>

    <script>
        //1.获取标签对象
        var title = document.getElementById("title");
        alert("我要换内容了");
        title.innerHTML = "个人头像";
    </script>

</body>
</html>

3.2概念

Document Object Model 文档对象模型
  将标记语言文档的各个组成部分,封装为对象。可以使用这些对象,对标记语言文档进行CRUD的动态操作

W3C DOM 标准被分为 3 个不同的部分:

   核心 DOM - 针对任何结构化文档的标准模型
    Document:文档对象
    Element:元素对象
    Attribute:属性对象
    Text:文本对象
    Comment:注释对象

    Node:节点对象,其他5个的父对象
  XML DOM - 针对 XML 文档的标准模型
  HTML DOM - 针对 HTML 文档的标准模型

3.3核心DOM模型

Document:文档对象
  1. 创建(获取):在html dom模型中可以使用window对象来获取
    1. window.document
    2. document
  2. 方法:
    1. 获取Element对象:
      1. getElementById() : 根据id属性值获取元素对象。id属性值一般唯一
      2. getElementsByTagName():根据元素名称获取元素对象们。返回值是一个数组
      3. getElementsByClassName():根据Class属性值获取元素对象们。返回值是一个数组
      4. getElementsByName(): 根据name属性值获取元素对象们。返回值是一个数组

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="div1">div1</div>
    <div id="div2">div2</div>
    <div id="div3">div3</div>

    <div class="cls1">div4</div>
    <div class="cls1">div5</div>

    <input type="text" name="username">
<script>
    //2.根据元素名称获取元素对象们
    var divs = document.getElementsByTagName("div");
    // alert(divs.length);
    //3.根据class属性获取元素对象们
    var div_cls = document.getElementsByClassName("cls1");
    // alert(div_cls.length);
    //4.根据name属性获取元素对象们
    var div_name = document.getElementsByName("username");
    // alert(div_name.length);

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

    2. 创建其他DOM对象:
      createAttribute(name)
      createComment()
      createElement()
      createTextNode()

  3. 属性


Element:元素对象
  1. 获取/创建:通过document来获取和创建
  2. 方法:
    1. removeAttribute():删除属性
    2. setAttribute():设置属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <a>点我一下试试</a>
    <input type="button" id="btn_set" value="设置属性">
    <input type="button" id="btn_remove" value="删除属性">
    <script>
        var btn_set = document.getElementById("btn_set");
        btn_set.onclick=function () {
            //1.获取a标签
            var element_a = document.getElementsByTagName("a")[0];
            element_a.setAttribute("href","https://www.baidu.com");
        };

        var btn_remove = document.getElementById("btn_remove");
        btn_remove.onclick=function () {
            //1.获取a标签
            var element_a = document.getElementsByTagName("a")[0];
            element_a.removeAttribute("href");
        }

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

Node:节点对象,其他5个的父对象
  特点:所有dom对象都可以被认为是一个节点
  方法:
    CRUD dom树:
      appendChild():向节点的子节点列表的结尾添加新的子节点。
      removeChild() :删除(并返回)当前节点的指定子节点。
      replaceChild():用新节点替换一个子节点。
  属性:
    parentNode 返回节点的父节点。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div {
            border: 1px solid red;
        }

        #div1 {
            width: 200px;
            height: 200px;
        }

        #div2 {
            width: 100px;
            height: 100px;
        }

        #div3 {
            width: 100px;
            height: 100px;
        }
    </style>
</head>
<body>
    <div id="div1">
        <div id="div2">div2</div>
        div1
    </div>


    <!--超链接功能:
    1.可以被点击:样式
    2.点击后跳转到href指定的url
    需求:保留1功能,去掉2功能
    实现:href="javascript:void(0);"-->
    <a href="javascript:void(0)" id="del">删除子节点</a>
    <a href="javascript:void(0)" id="add">添加子节点</a>
    <!--<input type="button" id="del" value="删除子节点">-->

    <script>
        var element_a = document.getElementById("del");
        element_a.onclick = function () {
            var div1 = document.getElementById("div1");
            var div2 = document.getElementById("div2");
            div1.removeChild(div2);
        };

        var element_add = document.getElementById("add");
        element_add.onclick = function () {
            var div1 = document.getElementById("div1");
            //给div1添加子节点
            //创建div节点
            var div3 = document.createElement("div");
            div3.setAttribute("id","div3");
            div1.appendChild(div3);
        };

        //获取父节点
        var div2 = document.getElementById("div2");
        var div1 = div2.parentNode;
        alert(div1);
    </script>

</body>
</html>

3.4案例:动态添加删除表格

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        table {
            border: 1px solid;
            margin: auto;
            width: 500px;
        }

        td, th {
            text-align: center;
            border: 1px solid;
        }

        div {
            text-align: center;
            margin: 50px;
        }

    </style>
</head>
<body>
    <div>
        <input type="text" id="id" placeholder="请输入编号">
        <input type="text" id="name" placeholder="请输入姓名">
        <input type="text" id="gender" placeholder="请输入性别">
        <input type="button" id="btn_add" value="添加">
    </div>

    <table>
        <caption>学生信息表</caption>
        <tr>
            <th>编号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>操作</th>
        </tr>

        <tr>
            <td>1</td>
            <td>小明</td>
            <td></td>
            <td><a href="javascript:void(0);" onclick="delTr(this)">删除</a></td>
        </tr>

    </table>

    <script>
        /*
        分析
            1.添加
                1.给添加按钮绑定单击事件
                2.获取文本框的内容
                3.创建td,设置td的文本框内容
                4.创建tr
                5.将td添加到tr中
                6。获取table,将tr添加到table中
            2.删除
                1.确定点击的是哪一个超链接
                     <td><a href="javascript:void(0);" onclick="delTr(this)">删除</a></td>
                2.怎么删除
                    removeChild():通过父标签删除子节点
         */
        //1.获取按钮
        document.getElementById("btn_add").onclick = function () {
            //2.获取文本框的内容
            var id = document.getElementById("id").value;
            var name = document.getElementById("name").value;
            var gender = document.getElementById("gender").value;

            //3.创建td,设置td的文本框内容
            var td_id = document.createElement("td");
            var text_id = document.createTextNode(id);
            td_id.appendChild(text_id);

            var td_name = document.createElement("td");
            var text_name = document.createTextNode(name);
            td_name.appendChild(text_name);

            var td_gender = document.createElement("td");
            var text_gender = document.createTextNode(gender);
            td_gender.appendChild(text_gender);
            //a标签的td
            var td_a = document.createElement("td");
            var element_a = document.createElement("a");
            element_a.setAttribute("href", "javascript:void(0);");
            element_a.setAttribute("onclick", "delTr(this);");
            var text_a = document.createTextNode("删除");
            element_a.appendChild(text_a);
            td_a.appendChild(element_a);

            //4.创建tr
            var tr = document.createElement("tr");
            tr.appendChild(td_id);
            tr.appendChild(td_name);
            tr.appendChild(td_gender);
            tr.appendChild(td_a);
            //6。获取table,将tr添加到table中
            var table = document.getElementsByTagName("table")[0];
            table.appendChild(tr);
        };

        //删除方法
        function delTr(obj) {
            var table = obj.parentNode.parentNode.parentNode;
            var tr = obj.parentNode.parentNode;
            table.removeChild(tr);
        }

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

 

 

3.5HTML的DOM

1. 标签体的设置和获取:innerHTML

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

    <script>
        var div = document.getElementById("div1");
        // var innerHTML  = div.innerHTML;
        // alert(innerHTML);
        div.innerHTML +="<input type='text'>"

    </script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        table {
            border: 1px solid;
            margin: auto;
            width: 500px;
        }

        td, th {
            text-align: center;
            border: 1px solid;
        }

        div {
            text-align: center;
            margin: 50px;
        }

    </style>
</head>
<body>
    <div>
        <input type="text" id="id" placeholder="请输入编号">
        <input type="text" id="name" placeholder="请输入姓名">
        <input type="text" id="gender" placeholder="请输入性别">
        <input type="button" id="btn_add" value="添加">
    </div>

    <table>
        <caption>学生信息表</caption>
        <tr>
            <th>编号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>操作</th>
        </tr>

        <tr>
            <td>1</td>
            <td>小明</td>
            <td></td>
            <td><a href="javascript:void(0);" onclick="delTr(this)">删除</a></td>
        </tr>

    </table>

    <script>
        //使用innerHTML添加
        // 1.获取按钮
        document.getElementById("btn_add").onclick = function () {
            //2.获取文本框的内容
            var id = document.getElementById("id").value;
            var name = document.getElementById("name").value;
            var gender = document.getElementById("gender").value;

            var table = document.getElementsByTagName("table")[0];
            table.innerHTML += " <tr>\n" +
                "            <td>" + id + "</td>\n" +
                "            <td>" + name + "</td>\n" +
                "            <td>" + gender + "</td>\n" +
                "            <td><a href=\"javascript:void(0);\" onclick=\"delTr(this)\">删除</a></td>\n" +
                "        </tr>"
        };

        //删除方法
        function delTr(obj) {
            var table = obj.parentNode.parentNode.parentNode;
            var tr = obj.parentNode.parentNode;
            table.removeChild(tr);
        }

    </script>
</body>
</html

2. 使用html元素对象的属性

3. 控制元素样式

  1. 使用元素的style属性来设置

    如:

      //修改样式方式1

      div1.style.border = "1px solid red";

       div1.style.width = "200px";

      //font-size--> fontSize

      div1.style.fontSize = "20px";

  2. 提前定义好类选择器的样式,通过元素的className属性来设置其class属性值。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .d1 {
            border: 1px solid red;
            width: 100px;
            height: 100px;
        }

        .d2 {
            border: 1px solid blue;
            width: 200px;
            height: 200px;
        }
    </style>
</head>
<body>
    <div id="div1">
        div
    </div>

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

    <script>
        var div1 = document.getElementById("div1");
        div1.onclick = function () {
            //修改样式方式1
            div1.style.border = "1px solid red";
            div1.style.width = "200px";

            div1.style.fontSize = "30px";
        };

        var div2 = document.getElementById("div2");
        div2.onclick = function () {
            div2.className = "d1";
        }
    </script>
</body>
</html>

3.2事件

功能: 某些组件被执行了某些操作后,触发某些代码的执行。

如何绑定事件:
  1. 直接在html标签上,指定事件的属性(操作),属性值就是js代码

    1. 事件:onclick--- 单击事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        function fun() {
            alert("我被点击了");
            alert("我被点击了2222");
        }
    </script>
</head>
<body>
    
    <img id="light" src="img/1.jpg" onclick="fun();">
    
</body>
</html>

  2. 通过js获取元素对象,指定事件属性,设置一个函数

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

</head>
<body>

    <img id="light" src="img/1.jpg">

    <script>
        function fun() {
            alert("我被点击了");
            alert("我被点击了2222");
        }
        var light = document.getElementById("light");
        light.onclick = fun;
    </script>
</body>
</html>

 

概念:某些组件被执行了某些操作后,触发某些代码的执行。

  事件:某些操作。如: 单击,双击,键盘按下了,鼠标移动了

  事件源:组件。如: 按钮 文本输入框...

  监听器:代码。

  注册监听:将事件,事件源,监听器结合在一起。 当事件源上发生了某个事件,则触发执行某个监听器代码。

  

常见的事件:

  1. 点击事件:

    1. onclick:单击事件

    2. ondblclick:双击事件

  2. 焦点事件

    1. onblur:失去焦点

      一般用于表单校验

    2. onfocus:元素获得焦点。

  3. 加载事件:

    1. onload:一张页面或一幅图像完成加载。

  4. 鼠标事件:

    1. onmousedown鼠标按钮被按下。

    2. onmouseup        鼠标按键被松开。

    3. onmousemove鼠标被移动。

    4. onmouseover鼠标移到某元素之上。

    5. onmouseout        鼠标从某元素移开。

  5. 键盘事件:        

    1. onkeydown某个键盘按键被按下。

    2. onkeyup某个键盘按键被松开。

    3. onkeypress某个键盘按键被按下并松开。

  6. 选择和改变

    1. onchange域的内容被改变。

    2. onselect文本被选中。

  7. 表单事件:

    1. onsubmit确认按钮被点击。

 

    2. onreset重置按钮被点击。

案例:表格全选和全不选

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        table {
            border: 1px solid;
            margin: auto;
            width: 500px;
        }

        td, th {
            text-align: center;
            border: 1px solid;
        }

        div {
            margin-left: 32%;
            margin-top: 10px;
        }

        .out {
            background-color: white;
        }

        .over {
            background-color: pink;
        }
    </style>

    <script>
        window.onload = function () {
            //1.全选
            document.getElementById("selectAll").onclick = function () {
                var cbs = document.getElementsByName("cb");
                for (var i = 0; i < cbs.length; i++) {
                    cbs[i].checked = true;
                }
            };

            //2.全不选
            document.getElementById("unSelectAll").onclick = function () {
                var cbs = document.getElementsByName("cb");
                for (var i = 0; i < cbs.length; i++) {
                    cbs[i].checked = false;
                }
            };

            //3.反选
            document.getElementById("selectRev").onclick = function () {
                var cbs = document.getElementsByName("cb");
                for (var i = 0; i < cbs.length; i++) {
                    cbs[i].checked = !cbs[i].checked;
                }
            };

            //4.第一个cb
            document.getElementById("firstcb").onclick = function () {
                var cbs = document.getElementsByName("cb");
                for (var i = 0; i < cbs.length; i++) {
                    //和第一个cb的状态相同
                    cbs[i].checked = this.checked;
                }
            };

            //5.给所有tr绑定鼠标移动到元素之上事件
            var trs = document.getElementsByTagName("tr");
            for (var i = 0; i < trs.length; i++) {
                trs[i].onmouseover = function () {
                    this.className = "over";
                };

                trs[i].onmouseout = function () {
                    this.className = "out";
                }
            }
        }
    </script>
</head>
<body>
    <table>
        <caption>学生信息表</caption>
        <tr>
            <th><input type="checkbox" name="cb" id="firstcb"></th>
            <th>编号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>操作</th>
        </tr>

        <tr>
            <td><input type="checkbox" name="cb"></td>
            <td>1</td>
            <td>小明</td>
            <td></td>
            <td><a href="javascript:void(0);" onclick="delTr(this)">删除</a></td>
        </tr>
        <tr>
            <td><input type="checkbox" name="cb"></td>
            <td>2</td>
            <td>小红</td>
            <td></td>
            <td><a href="javascript:void(0);" onclick="delTr(this)">删除</a></td>
        </tr>
        <tr>
            <td><input type="checkbox" name="cb"></td>
            <td>3</td>
            <td>小刚</td>
            <td></td>
            <td><a href="javascript:void(0);" onclick="delTr(this)">删除</a></td>
        </tr>
    </table>

    <div>
        <input type="button" id="selectAll" value="全选">
        <input type="button" id="unSelectAll" value="全不选">
        <input type="button" id="selectRev" value="反选">
    </div>

</body>
</html>

案例:切换图片

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <img id="light" src="img/1.jpg">
    <script>
        //1.获取图片对象
            var light = document.getElementById("light");
            var flag = false;
        //2.绑定单击事件
            light.onclick = function () {
                if(flag){
                    light.src = "img/2.jpg";
                    flag = false;
                }else {
                    light.src = "img/1.jpg";
                    flag = true;
                }
            }

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

 

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

3.DOM编程

3.1 概念

DOM(document Object Model)文档对象模型编程。

3.2 查询标签对象

通过document对象获取,document代表一个html页面

3.2.1通过document对象的集合

作用: 获取多个或者同类的标签对象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>通过document的集合获取标签对象</title>

</head>
<body>
<a href=""></a>
<form><img src=""/><a href=""></a><img src="" /></form>
<form><img src=""/><a href=""></a></form>
<script type="text/javascript">
    /*
        all: 获取所有标签对象
        forms: 获取form标签对象
        images: 获取img标签对象
        links: 获取a标签对象
    */
    nodeList = document.all; //返回标签对象数组
    nodeList2 = document.forms; //返回标签对象数组
    nodeList3 = document.images; //返回对象数组
     nodeList4 = document.links;//返回对象数组

    // alert(nodeList.length);
    //遍历标签对象

    //nodeName:获取标签名称
    for (let i = 0; i < nodeList.length; i++) {
        document.write(nodeList[i].nodeName + " ");
    }
    for (let i = 0; i < nodeList2.length; i++) {
        document.write(nodeList2[i].nodeName + " , ");
    }
    for (let i = 0; i < nodeList3.length; i++) {
        document.write(nodeList3[i].nodeName + " : ");
    }
    for (let i = 0; i < nodeList4.length; i++) {
        document.write(nodeList4[i].nodeName + " ! ");
    }


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

3.2.2通过关系查找标签对象

父节点: parentNode属性

子节点: childNodes属性

第一个子节点: firstChild属性

最后一个子节点: lastChild属性

下一个兄弟节点: nextSibling属性

上一个兄弟节点: previousSibling属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>查询标签对象方法</title>
    <!--
        父节点: parentNode属性
        子节点: childNodes属性
        第一个子节点: firstChild属性
        最后一个子节点: lastChild属性
        下一个兄弟节点: nextSibling属性
        上一个兄弟节点: previousSibling属性


       注意:
           1)childNodes属性,firstChild属性,lastChild属性获取的子节点包含了以下的元素:
                a)标签      1
                b)空格换行   3
                c)html注释   8

            在子节点中筛选出标签出来呢? 可以使用 nodeType属性: 节点类型
                    取出nodeType值为1的节点,就是标签对象
-->
</head>
<body>
<form><a href="">超链接</a><!--html注释 --><input type="text"/><input type="button"/></form>
<form><a href="">超链接</a><input type="type"/></form>
</body>
<script type="text/javascript">
    //得到a标签(获取第一个a标签对象)
    aNode = document.links[0];
    document.write(aNode.nodeName + "</br>");

    //得到父标签
    formNode = aNode.parentNode;
    document.write("父标签:" + formNode.nodeName + "</br>");

    //得到form的子节点,返回数组
    nodeList = formNode.childNodes;
    document.write("子节点的个数:" + nodeList.length);

    for (let i = 0; i < nodeList.length; i++) {
        //筛选出标签对象
        document.write(nodeList[i].nodeName + ",节点类型:" + nodeList[i].nodeType + "<br/>");
    }
    document.write("<br/>");
    for (let i = 0; i < nodeList.length; i++) {
        //筛选出标签对象
        if (nodeList[i].nodeType == 1) {
            document.write(nodeList[i].nodeName + ",节点类型:" + nodeList[i].nodeType + "<br/>");
        }
    }

    //第一个子节点
    firstChild = formNode.firstChild;
    document.write("第一个子节点:" + firstChild.nodeName + "<br/>");

    //最后一个子节点
    lastChild = formNode.lastChild;
    document.write("最后一个子节点: " + lastChild.nodeName + "<br/>");


    aNode = document.links[1];
    //得到下一个兄弟节点
    next = aNode.nextSibling;
    document.write("下一个兄弟节点: " + next.nodeName + "<br/>");

    //得到上一个兄弟节点
    previous = next.previousSibling;
    document.write("上一个兄弟节点: " + previous.nodeName);
</script>
</html>

3.2.3通过document方法查询标签对象

document.getElementById("id属性值");   最常用

documetn.getElementsByName("name属性值");  获取同name属性名的标签列表

document.getElementsByTagName("标签名")  获取相同标签名的标签列表

 

3.3 修改标签对象属性

常用的需要修改的属性:

innerHTML属性:修改标签体内容 <span>xxxxxx</span> <div></div> <select></select>

innerHTML : 设置的标签内的html

innerText: 设置标签内容的文本 

                                               

value属性: 修改value属性值。 input type="text"

src属性: 修改图片的src属性。 <img src=""/>

checked属性:修改单选或多项的默认值。   <input type="radio/checked" checked=""/> 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>设置标签对象的属性</title>
    <!--
经常修改的属性:
innerHTML属性:修改标签体内容 <span>xxxxxx</span> <div></div> <select></select>
        innerHTML : 设置的标签内的html代码

value属性: 修改value属性值。 input type="text"
src属性: 修改图片的src属性。 <img src=""/>
checked属性:修改单选或多项的默认值。(选择的当前状态)   <input type="radio/checked" checked=""/>
        false: 没选中   true: 已选中
 -->
</head>
<body>
<span id="mySpan"></span>
<hr/>
<input type="text" id="userName" value="4-12位字母或数字"/>
<hr/>
<img src="../picture/1.jpg" width="300px" height="200px"/><input type="button" value="切换图片" onclick="changeImg()"/>
<hr/>
<input type="button" value="全选" onclick="quanxuan()"/>
<input type="checkbox" value="篮球" name="hobit"/>篮球
<input type="checkbox" value="足球" name="hobit"/>足球
<input type="checkbox" value="羽毛球" name="hobit"/>羽毛球
</body>
<script type="text/javascript">
    //获取span标签对象
    mySpan = document.getElementById("mySpan");
    //设置标签内的HTML内容, 在IE和火狐可以
    mySpan.innerHTML = "<h3>标题</h3>";
    /*innerText在IE可以,在火狐不行*/
    // mySpan.innerText="标签";


    //获取input对象
    userName = document.getElementById("userName");
    userName.value = "";


    function changeImg() {
        //得到标签对象
        img = document.getElementsByTagName("img")[0];
        img.src = "../picture/qq.jpg";
    }

    function quanxuan() {
        // lq = document.getElementsByName("hobit")[0];
        //alert(lq.checked);
        //设置状态
        // lq.checked = true;

        hList = document.getElementsByName("hobit");
        for (i = 0; i < hList.length; i++) {
            hList[i].checked = true;
        }

    }

</script>
</html>

3.4 标签对象方法

 添加相关的:

document.createElement("标签名")     创建节点对象

setAttribute("name","value"):       设置节点的属性

插入相关的:

appendChild("标签对象") ;   添加子节点对象

insertBefore("新标签对象","指定的对象")  在指定的对象前面添加子节点对象

删除:

removeChild("标签对象");   删除子节点

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>标签对象的方法</title>
    <!--
            添加相关的:
                    document.createElement("标签名")     创建节点对象
                    setAttribute("name","value"):       设置节点的属性

            插入相关的:
                    appendChild("标签对象") ;   添加子节点对象
                    insertBefore("新标签对象","指定的对象")  在指定的对象前面添加子节点对象

            删除:
                    removeChild("标签对象");   删除子节点

-->
    <script type="text/javascript">
        //添加按钮
        function addItem() {
            //1.创建一个按钮对象
            let input = document.createElement("input");  // <input />
            //2.设置属性
            input.setAttribute("type", "button"); // <input type="button"/>
            input.setAttribute("value", "新按钮");  // <input type="button" value="新按钮"/>

            //3.在html页面中插入这个新建的按钮对象
            //3.1 得到body对象
            let bodyNode = document.getElementsByTagName("body")[0];
            //3.2 把新的按钮对象加入到body对象的子节点中(加到最后一个)
            bodyNode.appendChild(input);

            /*
            //3.3 把新的按钮对象加入到btn按钮的前面
            var btn = document.getElementById("btn");
            //参数一: 新的对象   参数二: 插入到前面的对象
            bodyNode.insertBefore(input,btn);
            */
        }

        function delItem() {
            //找到需要删除的节点对象
            //获取最后一个子标签
            let bodyNode = document.getElementsByTagName("body")[0];
            let lastChild = bodyNode.lastChild;
            //删除子标签
            bodyNode.removeChild(lastChild);
        }
    </script>
</head>
<body>
<input type="button" value="添加" onclick="addItem()"/><input type="button" value="删除" onclick="delItem()"/><input
        id="btn" type="button" value="按钮"/>

</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>动态表格</title>
    <script type="text/javascript">
    let count = 2;
    function addItem(){
        /*
        <tr>
        <td>1</td>
        <td><input type="text"/></td>
        <td><input type="password"/></td>
        </tr>

        */
        //1.创建tr对象
        let tr = document.createElement("tr");
         
        //2.创建三个td对象
        let td1 = document.createElement("td");
        td1.innerHTML = count;

        let td2 = document.createElement("td");
        let input1 = document.createElement("input");
        input1.setAttribute("type","text");
        //把input放入td中
        td2.appendChild(input1);

        let td3 = document.createElement("td");
        let input2 = document.createElement("input");
        input2.setAttribute("type","password");
        //把input放入td中
        td3.appendChild(input2);

        //3.把三个td放入tr中
        tr.appendChild(td1);
        tr.appendChild(td2);
        tr.appendChild(td3);

        //4.把tr放在tbody的子节点
        let tbody = document.getElementsByTagName("tbody")[0];
        tbody.appendChild(tr);

        count++;
    }

    function delItem(){
        if(count>2){
            //查找需要删除的节点
            //tbody最后一个子节点
            let tbody = document.getElementsByTagName("tbody")[0];
            let lastChild = tbody.lastChild;
            tbody.removeChild(lastChild);

            count--;
        }
    }
</script>
</head>
<body>
<table border="1" align="center" width="400px">
    <thead>
    <tr>
        <th>编号</th>
        <th>姓名</th>
        <th>密码</th>
    </tr>
    </thead>
     <tbody>
    <tr>
        <td>1</td>
        <td><input type="text"/></td>
        <td><input type="password"/></td>
    </tr>
    </tbody>
    <tfoot>
    <tr>
        <td colspan="3"><input type="button" value="添加一行" onclick="addItem()"/><input type="button" value="删除一行" onclick="delItem()"/></td>
    </tr>
    </tfoot>
</table>
</body>
</html>