上节回顾:

day54

1. 前情回顾

        1. DOM对象和BOM对象
            1. BOM 对象 --> window
                location
                    location.href    
                    location.href="https://www.sogo.com"
                    location.reload
                history
                navigator
            2. DOM
                1. document结构
                    1. 节点
                        1. 文档节点
                        2. 元素节点
                        3. 属性节点
                        4. 文本节点
                    2. 查找标签
                        1. 基本查找
                            1. ID查找 --> docuemnt.getElementById
                            2. 标签名查找 --> document.getElementsByTagName
                            3. class名查找 --> document.getElementsByClassName
                            // 4. 属性查找    --> document.getElementsByName
                        2. 层级查找
                            1. 上一级父标签 --> eleObj.parentElement
                            2. 儿子标签     --> eleObj.children
                            3. 第一个儿子   --> eleObj.firstElementChild
                            4. 最后一个儿子 --> eleObj.lastElementChild
                            5. 上一个兄弟标签 --> eleObj.previousElementSibling
                            5. 下一个兄弟标签  --> eleObj.nextElementSibling
                            
                    3. 创建标签
                        1. doucument.creatElement("div")  --> 要创建什么标签括号里面就写什么
                        2. 设置标签内容
                            1. eleObj.innerHTML = "<p>P标签</p>"
                            2. eleObj.innerText = "标签中间的文本"
                    
                        3. 标签属性
                            1. input标签相关
                                1. inputEle.value  --> 获取input框的输入值
                                2. inputEle.value = "请输入xxx" --> 设置input框的值
                            2. checkbox标签相关
                                1. checkboxEle.checked --> 返回true或false
                                2. checkboxEle.checked = true  --> 选中该checkbox
                            3. select标签相关
                                1. selectObj.options  --> 获取所有的option选项 (数组)
                                2. selecObj.selectedIndex  --> 获取选中的option的索引值
                                3. selecObj.options.length=0 --> 快速清空option
        
        2. JS 事件
            常用事件
                onclick
                ondbclick
                onload
                blur
                fouces
                onchange (select联动示例)
            绑定事件方法
                1. 在标签上通过特定的事件属性绑定事件
                    比如: <div onclick="f()">点我点我点我</div> 
                2. 通过JS绑定事件
                    eleObj.onclick = function(){ ... }
                3. 事件委托(利用事件冒泡)
                    找到父标签,给子标签绑定事件
                    <ul>li*100</ul>
                    
                    ulEle.onclick=function(){
                        event.target  --> 点击的那个标签对象
                        alert(event.target.innerText)
                    }
                    
    补充知识点
        1. 定时器示例
        2. addEventListener
上节回顾课堂笔记

 

今日内容:

2. 今日内容

    补充经验:
        1. 项目不要一开始就规划十分完美,要从最基本的功能开始写起,然后逐渐丰富
        2. 与同事沟通以正式邮件为主
        3. 项目时间要给自己留有富余
        
        4. CDN是什么?

    1. jQuery是什么    --> 写项目都用这个
    
        2. jQuery短小精悍
        write less,do more
        
        是一个别人写好的类库(模块),我们直接在页面上引用这个类库(模块),就可以直接使用类库里面定义好的方法
        
    2. jQuery怎么用
        1. 引用jQuery文件
            两种方式:
            1. 本地文件
                <script src="jquery-3.2.1.min.js"></script>
                <script>按照jQuery的规则写代码</script>
            2. CDN方式
                <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
                <script>按照jQuery的规则写代码</script>
        2. jQuery版本
            3.x
            
            jQuery.js
            jQuery.min.js
    3. jQuery使用
    
        1. 查找标签
            军规:$("这里面写条件")  $后面没有空格
                
            1. 基本查找
                1. ID查找
                $("#id值")
                2. class名找
                $(".class名")
                
                3. 标签名找
                $("标签名")
                
                4. :has
        
        2. 修改标签的样式
            原生JS:
                获取样式类: classList
                添加样式类名 classList.add(.cls)
                移除样式类名 classList.remove(.cls)
            JQuery版:
                获取样式类
                添加样式类名
                移除样式类名
        
        3. 修改标签
        
        4. 创建标签/添加标签/删除标签
        
        5. 事件
        
        6. 动画
        
        7. 插件
        
        8.Ajax
今日内容
3. 今日作业

    1. 上午的DOM补充的两个例子
        1. 定时器 (全局变量)
        2. addEventListener (绑定多个事件)
        
    2. 课上练习题(做完)
    
    3. 左侧菜单改成使用jQuery找标签的方式
    
    4. 五点检查抽屉作业
            
今日作业

 

 

作业讲解:

1.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>作业分解大礼包</title>
    <style>
        .cover {
            position: fixed;
            top: 0;
            right: 0;
            bottom: 0;
            left: 0;
            background-color: rgba(0, 0, 0, 0.3);
            z-index: 999;
        }

        .modal {
            position: fixed;
            top: 50%;
            left: 50%;
            width: 600px;
            height: 400px;
            margin-left: -300px;
            margin-top: -200px;
            z-index: 1000;
            background-color: white;
        }
        .hide {
            display: none;
        }
    </style>
</head>
<body>

<input type="button" id="b1" value="添加">

<table border="1" id="t1">
    <thead>
    <tr>
        <th>#</th>
        <th>姓名</th>
        <th>爱好</th>
        <th>操作</th>
    </tr>
    </thead>
    <tbody>
     <tr>
        <td>1</td>
        <td>Egon</td>
        <td>杠娘</td>
        <td>
            <input type="button" value="编辑">
            <input class="delete" type="button" value="删除">
        </td>
    </tr>
    <tr>
        <td>2</td>
        <td>Alex</td>
        <td>吹牛逼</td>
        <td>
            <input type="button" value="编辑">
            <input class="delete" type="button" value="删除">
        </td>
    </tr>
    <tr>
        <td>3</td>
        <td>Yuan</td>
        <td>日天</td>
        <td>
            <input type="button" value="编辑">
            <input class="delete" type="button" value="删除">
        </td>
    </tr>
    </tbody>
</table>


<div class="cover hide c1"></div>
<div class="modal hide c1">
    <p>姓名<input type="text" id="modal-name"></p>
    <p>爱好<input type="text" id="modal-hobby"></p>

    <input type="button" value="提交" id="modal-submit">
    <input type="button" value="取消" id="modal-cancel">
</div>

<script>
    // 显示模态框
    function showModal() {
        // 找到那两个div
        var c1Eles = document.getElementsByClassName("c1");
        for (var i=0;i<c1Eles.length;i++) {
            c1Eles[i].classList.remove("hide");
        }
    }

    // 隐藏模态框
    function hideModal() {
        // 找到那两个div
        var c1Eles = document.getElementsByClassName("c1");
        for (var i=0;i<c1Eles.length;i++) {
            c1Eles[i].classList.add("hide");
        }
    }

    // 找到添加按钮绑定事件
    var b1Ele = document.getElementById("b1");
    b1Ele.onclick=function () {
        showModal();
    };

    // 找到取消按钮
    var cancelEle = document.getElementById("modal-cancel");
    cancelEle.onclick=function () {
        //  点击取消按钮要做的事儿
        // 添加hide class
        hideModal();
    };

    //  找modal中的提交按钮,绑定事件
    var submitEle = document.getElementById("modal-submit");
    submitEle.onclick=function () {
        // 模态框里点击提交按钮要做的事儿
        // 1. 取到input筐的值
        var nameInput = document.getElementById("modal-name");
        var hobbyInput = document.getElementById("modal-hobby");

        var name = nameInput.value;
        var hobby = hobbyInput.value;

        // 2. 创建tr标签
        var trEle = document.createElement("tr");
        // 序号
        var tableEle = document.getElementById("t1");
        var number = tableEle.getElementsByTagName("tr").length;


        // 拼接tr的内容
        trEle.innerHTML = "<td>" + number + "</td>" + "<td>" + name + "</td>" + "<td>" + hobby + "</td>" + '<td><input type="button" value="编辑"> <input class="delete" type="button" value="删除"></td>'

        // 3. 添加到tbody里
        var tbodyEle = tableEle.getElementsByTagName("tbody")[0];
        tbodyEle.appendChild(trEle);
        // 4. 隐藏modal
        hideModal();
    };
        // 删除按钮绑定事件
        // 1. 找标签
        var tableEle = document.getElementById("t1");
        tableEle.onclick=function () {
            // 删除按钮
            var currentEle = event.target;
            if (currentEle.classList.contains("delete")) {
                // 执行删除操作
                var currentTr = currentEle.parentElement.parentElement;
                var tbodyEle = tableEle.getElementsByTagName("tbody")[0];
                tbodyEle.removeChild(currentTr);
                // ID重排
            }
        }
</script>
</body>
表格的增删

2.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>定时器示例</title>
</head>
<body>

<input type="text" id="i1">

<input type="button" value="开始" onclick="start();">
<input type="button" value="结束" onclick="end();">

<script>
    var t;   // undefined
   function f() {
        var dateObj = new Date();
    //  获取i1标签
    var i1Ele = document.getElementById("i1");
    i1Ele.value=dateObj.toLocaleString();
   }
    // 每隔一秒就执行一次f()
    function start() {
       f();
       // 只创建一个定时器,有定时器的话我就不创建了
        if (t === undefined) {
            t = setInterval(f, 1000);
        }
    }

    // 停止计时
    function end() {
        clearInterval(t);
        // t现在是什么?
        console.log("---> ", t)
        t = undefined;
    }

</script>
</body>
</html>
定时器示例

 

3.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge">
    <title>绑定多个事件</title>
</head>
<body>
<input type="button" value="点我" id="il">
<script>
    function f1() {
        console.log(1);
    }
    function f2() {
        consol.log(2)
    }
    var ilEle =document.getElementById("il");
//    ilEle.onclick=function () {
//        //点我之后要执行的函数
//        f1();
//    };
//    ilEle.onclick=function () {
//        f2();
//    };
//    addEventListener,绑定多个事件不覆盖
    ilEle.addEventListener("click",f1);
    ilEle.addEventListener("click",f2);
</script>
</body>
</html>
绑定多个事件

 

 

 

上节补充:

 

新内容:

jQuery

 

 1、jQuery对象

jQuery对象就是通过jQuery包装DOM对象后产生的对象。jQuery对象是 jQuery独有的。如果一个对象是 jQuery对象,那么它就可以使用jQuery里的方法:例如$(“#i1”).html()。

$("#i1").html()的意思是:获取id值为 i1的元素的html代码。其中 html()是jQuery里的方法。

相当于: document.getElementById("i1").innerHTML;

虽然 jQuery对象是包装 DOM对象后产生的,但是 jQuery对象无法使用 DOM对象的任何方法,同理 DOM对象也没不能使用 jQuery里的方法。

一个约定,我们在声明一个jQuery对象变量的时候在变量名前面加上$:
View Code

 

一个约定,我们在声明一个jQuery对象变量的时候在变量名前面加上$:

var $variable = jQuery对像
var variable = DOM对象
$variable[0]//jQuery对象转成DOM对象

 拿上面那个例子举例,jQuery对象和DOM对象的使用:

$("#i1").html();//jQuery对象可以使用jQuery的方法
$("#i1")[0].innerHTML;// DOM对象使用DOM的方法

 

 

jQuery基础语法

$(selector).action()

查找标签

选择器

id选择器:

$("#id")

标签选择器:

$("tagName")

class选择器:

$(".className")

配合使用:

$("div.c1")  // 找到有c1 class类的div标签

所有元素选择器:

$("*")

组合选择器:

$("#id, .className, tagName")

层级选择器:

x和y可以为任意选择器

$("x y");// x的所有后代y(子子孙孙)
$("x > y");// x的所有儿子y(儿子)
$("x + y")// 找到所有紧挨在x后面的y
$("x ~ y")// x之后所有的兄弟y 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery引出</title>
</head>
<body>


<p>我是前面的p标签</p>
<div id="i1">我是id为i1的div标签</div>
<script src="jquery-3.2.1.min.js"></script>
<!--<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>-->
</body>
</html>
小练习 jQuery

 

 

基本筛选器:

复制代码
:first // 第一个
:last // 最后一个
:eq(index)// 索引等于index的那个元素
:even // 匹配所有索引值为偶数的元素,从 0 开始计数
:odd // 匹配所有索引值为奇数的元素,从 0 开始计数
:gt(index)// 匹配所有大于给定索引值的元素
:lt(index)// 匹配所有小于给定索引值的元素
:not(元素选择器)// 移除所有满足not条件的标签
:has(元素选择器)// 选取所有包含一个或多个标签在其内的标签(指的是从后代元素找)
复制代码

例子:

$("div:has(h1)")// 找到所有后代中有h1标签的div标签
$("div:has(.c1)")// 找到所有后代中有c1样式类的div标签
$("li:not(.c1)")// 找到所有不包含c1 class的li标签
$("li:not(:has(a))")// 找到所有后代中不含a标签的li标签

注意:

  1. 这里的hasnot不是简单的 有和 没有的意思,它俩没啥关系(不是一组)
  2. :not:has通常用.not().has()代替。
  3. $("div:has(.c1)")中的:has(.c1)等价于$("div .c1"),也就是找后代里面有c1的div标签。

练习:

自定义模态框,使用jQuery实现弹出和隐藏功能。

 jQuery版自定义模态框
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge">
    <title>基本选择器</title>
</head>
<body>
<div id="il">id值为il</div>
<div class="c1">c1</div>
<div class="c1">c1</div>

<p>p</p>
<p>p2</p>

<script src="jquery-3.2.1.min.js"></script>
</body>
基本选择器文档

 

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge">
    <title>7 jQuery 层级选择器</title>
</head>
<body>
<div id="d1" class="c1 c2 c3">
    <p>d1的儿子p</p>
    <div id="d2">
        <p>d1的孙子p 0</p>
        <p>d1的孙子p 1</p>
        <p>d1的孙子p 2</p>
        <p>d1的孙子p 3</p>
        <p>d1的孙子p 4</p>
    </div>
</div>
<input type="text" value="我是前面的">
<label for="il">姓名</label>

<input type="text" id="il">
<input type="text" value="111">

<input type="button" value="点我">

<label for="i2" id="11">爱好
    <input type="text" id="i2">
    <div>
        <input type="text">
    </div>
    <span class="s1"><i>1</i>span 0</span>
    <span>span1</span>
</label>

<script src="jquery-3.2.1.min.js"></script>
</body>
</html>
层级选择器文档

 

 

作业练习: