zoukankan      html  css  js  c++  java
  • day54 DOM补充练习 jQuery基本选择器

    上节回顾:

    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%;
                 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>
    层级选择器文档

    作业练习:

     

     

  • 相关阅读:
    UVa 10118 记忆化搜索 Free Candies
    CodeForces 568B DP Symmetric and Transitive
    UVa 11695 树的直径 Flight Planning
    UVa 10934 DP Dropping water balloons
    CodeForces 543D 树形DP Road Improvement
    CodeForces 570E DP Pig and Palindromes
    HDU 5396 区间DP 数学 Expression
    HDU 5402 模拟 构造 Travelling Salesman Problem
    HDU 5399 数学 Too Simple
    CodeForces 567F DP Mausoleum
  • 原文地址:https://www.cnblogs.com/number1994/p/8398662.html
Copyright © 2011-2022 走看看