• python 之 前端开发( jQuery选择器、筛选器、样式操作、文本操作、属性操作、文档操作)


    11.5 jQuery

    引入方式:

    方式一:本地引入
    <script src="jquery-3.3.1.min.js"></script>
    <script>        //注意,一定在引入jQuery之后,再使用jQuery提供的各种操作
        code...
    </script>
    ​
    方式二:直接使用CDN
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
    <script>
        code...
    </script>

    文档就绪事件:

    DOM文档加载的步骤

    1. 解析HTML结构。
    2. 加载外部脚本和样式表文件。
    3. 解析并执行脚本代码。
    4. DOM树构建完成。
    5. 加载图片等外部文件。
    6. 页面加载完毕
    11.51 选择器
    id选择器:
    $("#i1")
    标签选择器:
    $("p")
    class选择器:
    $(".c1")
    所有元素选择器:
    $("*")
    交集选择器:
    $("div.c1")     // 找到类为c1的div标签
    并集选择器:
    $("#i1,.c1,p")  // 找到所有id="i1"的标签和class="c1"的标签和p标签
    层级选择器:
    $("x y");       // x的所有后代y(子子孙孙)
    $("x>y");       // x的所有儿子y(儿子)
    $("x+y")        // 找到所有紧挨在x后面的兄弟y
    $("x~y")        // x之后所有的兄弟y 
    属性选择器:
    $("input[type='checkbox']");    // 取到checkbox类型的input标签
    $("input[type!='text']");       // 取到类型不是text的input标签

    基本筛选器:

    :first              // 第一个
    :last               // 最后一个
    :eq(index)          // 索引等于index的那个元素
    :even               // 匹配所有索引值为偶数的元素,从 0 开始计数
    :odd                // 匹配所有索引值为奇数的元素,从 0 开始计数
    :gt(index)           // 匹配所有大于给定索引值的元素
    :lt(index)          // 匹配所有小于给定索引值的元素
    :not(选择器)         // 过滤掉所有满足not条件的标签
    :has(选择器)         // 过滤出所有后代中满足has条件的父标签
    //例如
    $("div:has(h1)")    // 找到所有后代中有h1标签的div标签
    $("div:has(.c1)")   // 找到所有后代中有c1样式类的div标签
    $("li:not(.c1)")    // 找到所有不包含c1样式类的li标签
    $("li:not(:has(a))") // 找到所有后代中不含a标签的li标签
    11.52 表单常用筛选器

    表单常用筛选:

    :text
    :password
    :file
    :radio
    :checkbox
    :submit
    :reset
    :button
    例:
    $(":checkbox")      // 找到所有的checkbox

    表单对象状态属性筛选:

    :enabled
    :disabled
    :checked
    :selected

    注意:$(":checked")选择时连select中的带有selected属性的option标签也会选上,所以要用$("input:checked")

    11.53 筛选器
    下一个兄弟元素:
    $("#id").next()
    $("#id").nextAll()
    $("#id").nextUntil("#i2")  //从id="id"的标签开始往下选择兄弟标签直到id=i2的标签(不包含id=i2的标签)
    上一个兄弟元素:
    $("#id").prev()
    $("#id").prevAll()
    $("#id").prevUntil("#i2") //从id="id"的标签开始往上选择兄弟标签直到id=i2的标签(不包含id=i2的标签)
    父亲元素:
    $("#id").parent()
    $("#id").parents()                  // 查找当前元素的所有的父辈元素
    $("#id").parentsUntil("某个父元素")   // 查找当前元素的所有的父辈元素,直到遇到匹配的那个元素为止。
    儿子和兄弟元素:
    $("#id").children();        // 所有子标签
    $("#id").siblings();        // 兄弟标签、
    查找
    $("div").find("p") <==> $("div p")
    //搜索所有与指定表达式匹配的元素,这个函数是找出正在处理的元素的后代元素的好方法。
    筛选
    $("div").filter(".c1")  <==>  $("div.c1")  // 从结果集中过滤出有c1样式类的
    //筛选出与指定表达式匹配的元素集合,这个方法用于缩小匹配的范围,用逗号分隔多个表达式。
    .first()    // 获取匹配的第一个元素
    .last()     // 获取匹配的最后一个元素
    .not()      // 从匹配元素的集合中删除与指定表达式匹配的元素
    .has()      // 保留包含特定后代的父元素,去掉那些不含有指定后代的元素。
    .eq()       // 索引值等于指定值的元素
    11.54 标签操作之样式操作
    11.541 通过类属性操作样式
    addClass();      // 添加指定的CSS类名。
    removeClass();   // 移除指定的CSS类名。
    hasClass();      // 判断样式存不存在
    toggleClass();   // 切换CSS类名,如果有就移除,如果没有就添加。
    11.542 直接操作CSS样式
    css("color","red")                                    //DOM操作:Elem.style.color="red"
    $("p").css("color", "red");                            //将所有p标签的字体设置为红色
    $("#p1").css({"border":"1px solid black","color":"red"});//同时设置多个css样式
    11.543 jQuery版模态框
    <head>
    <style>
            .cover {
                position: fixed;
                top: 0;
                right: 0;
                bottom: 0;
                left: 0;
                background-color: rgba(0,0,0,0.4);
                z-index: 999;
            }
            .modal {
                background-color: white;
                height: 300px;
                width: 500px;
                position: absolute;
                top: 50%;
                left: 50%;
                z-index:1000;
                margin-top: -150px;
                margin-left: -250px;
            }
            .hide {
                display: none;      //不占空间,也不显示
            }
        </style>
    </head>
    <body>
    <div>
        <h1>海燕</h1>
        <p>在苍茫的大海上,狂风卷积着乌云,在乌云和大海之间,海燕像黑色的闪电,在高傲的飞翔。</p>
    </div>
    <button id="b1">点我登录</button>
    <div class="cover hide"></div>
    <div class="modal hide">
        <form action="">
            <p>
                <label>用户名
                    <input type="text">
                </label>
            </p>
            <p>
                <label>密码
                    <input type="password">
                </label>
            </p>
            <p>
                <input type="submit">
                <input type="button" id="cancel" value="取消">
            </p>
        </form>
    </div>
    <script src="jquery-3.3.1.min.js"></script>
    <script>
        // var b1Ele=document.getElementById("b1");     //原生DOM对象
        // var b1Ele = $("#b1")[0];                  //通过jQuery对象找到DOM对象,找到按钮,给它绑定事件,
        // b1Ele.onclick = function () {               //使用的是js对象
        //     $(".cover,.modal").removeClass("hide");  // 事件触发后,找到那两个div,移除它们的hide样式类
        // };
    var b1Ele = $("#b1");
         b1Ele.click(function () {
             $(".cover,.modal").removeClass("hide");
         });
    ​
        // var cancelButton = $("#cancel")[0];          //使用的是DOM对象
        // cancelButton.onclick = ()=>{
        //     $(".cover,.modal").addClass("hide");     // 事件触发后,找到那两个div,给它们添加hide样式类
        // };
        var cancelButton = $("#cancel");
        cancelButton.click(function () {
            $(".cover,.modal").addClass("hide");
        });
    </script>
    </body>
    View Code
    11.544 位置
    offset()                // 获取匹配元素在当前窗口的相对偏移或设置元素位置,可设置
    $(".c3").offset({top:284,left:400})
    position()              // 获取匹配元素相对父元素的偏移,不可设置
    $(window).scrollTop()               // 获取匹配元素相对滚动条顶部的偏移,可设置
    $(window).scrollTop(0)              //获取当前窗口相对滚动条顶部的偏移,并且可设置
    $(window).scrollLeft()              // 获取匹配元素相对滚动条左侧的偏移,可设置

    .offset()方法允许我们检索一个元素相对于文档(document)的当前位置。.position()的差别在于: .position()是相对于父级元素的位移。

    11.545 尺寸
    height()         //获取当前标签内容高度,并且可设置高度
    width()         //获取当前标签内容宽度,并且可设置宽度
    innerHeight()    //内容+padding
    innerWidth()     //内容+padding
    outerHeight()    //内容+padding+border
    outerWidth()     //内容+padding+border
    11.55 标签操作之文本内容操作
    text()                      //只查看所有标签内的文本   
    text(val)                   //先清空节点内容,再添加文本字符串:('<h1>我是h1</h1>')
    注意:值为标签的时候 不会被渲染为标签元素 只会被当做值渲染到浏览器中
    ​
    html()                      //查看所有子标签,包括文本和子标签
    html(val)                   //先清空节点内容,可识别文本内的html标签('<h1>我是h1</h1>')
    $('ul').html('<a href="#">百度一下</a>')   
    $('ul').html(function(){     //可以使用函数来设置所有匹配元素的内容
        return '哈哈哈'
    }) 
    ​
    val
    // 用途:val()用于操作input、select、textarea的value值
    // 示范一:
    <input type="text" name="username" >
    $('input[type=text]').val()                         //查看输入框内的值或添加值
    <input type="radio" name="sex" value="male">
    <input type="radio" name="sex" value="female">
    <input type="radio" name="sex" value="none">
    $('input[type=radio]').val(['male',])                //查看所选选项或选择选项,选择选项时使用列表
    // 示范二:
    <input type="checkbox" name="hobbies" value="basketball">
    <input type="checkbox" name="hobbies" value="football">
    <input type="checkbox" name="hobbies" value="doublecolorball">
    $('input[type=checkbox]').val(['basketball','football']) //查看所选选项或选择选项(选择选项时使用列表)
    11.551 登录注册示例
        <style>
            .error {color: red;}
        </style>
    <body>
    <form action="" method="">
        <p>
            <label for="username">用户名</label>
            <input type="text" id="username" name="username">
            <span class="error"></span>
        </p>
        <p>
            <label for="pwd">密码</label>
            <input type="password" id="pwd" name="pwd">
            <span class="error"></span>
        </p>
        <p>
            <input type="submit" id="b1" value="登录">
        </p>
    </form>
    <script src="jquery-3.3.1.min.js"></script>
    <script>
        $("#b1").click(function () {
            var flag = true;
            $(".error").text("");
            var $username = $("#username");
            var $pwd = $("#pwd");
            
            if ($username.val().length === 0){            // 取input框的值(用户名)判断长度是否为0
                $username.next().text("用户名不能为空!"); //找到class="error"的span标签添加提示信息
                flag = false;                           //用户名或密码为空时不提交表单
            }
            if ($pwd.val().length === 0){                //取input框的值(密码)判断长度是否为0           
                $pwd.next().text("密码不能为空!");       //找到class="error"的span标签添加提示信息
                flag = false;
            }
            return flag;                      // 表单填写有误就会返回false,阻止submit按钮默认的提交表单事件                          
        })
    </script>
    </body>
    View Code
    11.56 标签操作之属性操作

    用于id、class、name、value等或自定义属性:

    <images src="1.jpg" alt="图片不见了" title="这绝对正常的图片">
    attr(属性名)                                                // 返回第一个匹配元素的属性值
    $('.box2 img').attr('title','美女')                         // 为所有匹配元素设置一个属性值
    $('.box2 img').attr({'title': '美女', 'alt':'图片被狗吃了'})  // 为所有匹配元素设置多个属性值
    $('.box2 img').removeAttr('title')                          // 从每一个匹配的元素中删除一个属性

    用于checkbox和radio:

    <input type="radio" name="sex" value="male">
    $(':radio[value=male]').prop('checked',true);// 设置属性
    <input type="checkbox" name="hobbies" value="basketball">
    $("input :checkbox").prop('value')          // 获取value属性的值
    $("input :checkbox").prop('checked',true);   // 设置属性
    $(':checkbox[value=football]').prop('checked',true);
    $("table :checkbox").removeProp('value')     // 移除value属性

    注意:在1.x及2.x版本的jQuery中使用attr对checkbox进行赋值操作时会出bug,在3.x版本的jQuery中则没有这个问题。为了兼容性,我们在处理checkbox和radio的时候尽量使用特定的prop(),不要使用attr("checked", "checked")

    总结:1. 对于标签上有的能看到的属性和自定义属性都用attr 2. 对于返回布尔值的比如checkboxradiooption的是否被选中都用prop。

    11.561 全选反选取消
    <body>
    <button id="b1">全选</button>
    <button id="b2">取消</button>
    <button id="b3">反选</button>
    <table border="1">
        <thead>
        <tr>
            <th>#</th>
            <th>姓名</th>
            <th>爱好</th>
        </tr>
        </thead>
        <tbody>
        <tr>
            <td><input type="checkbox"></td>
            <td>Egon</td>
            <td>喊麦</td>
        </tr>
        <tr>
            <td><input type="checkbox"></td>
            <td>Alex</td>
            <td>吹牛逼</td>
        </tr>
        <tr>
            <td><input type="checkbox"></td>
            <td>Yuan</td>
            <td>不洗头</td>
        </tr>
        </tbody>
    </table>
    <script src="jquery-3.3.1.min.js"></script>
    <script>
        // 全选
        $("#b1").click(function () {        
            $("table :checkbox").prop("checked", true)// 让所有的checkbox选中
        });
        // 取消
        $("#b2").click(function () {        
            $("table :checkbox").prop("checked", false)// 让所有的checkbox取消选中
        });
        // 反选
        $("#b3").click(function () {        
            //$("table input:not(:checked)").prop("checked", true); // 找到没有选中的让它们选中        
            //$("table input:checked").prop("checked", false);        // 找到所有选中的让它们取消选中
             // 方法1:循环判断
             var $checkboxs = $("table input:checkbox");
            for (let i=0;i<$checkboxs.length;i++){
                 var $currentCheckbox = $($checkboxs[i]);
                 if ($currentCheckbox.prop("checked")){    // 如果之前是选中的,则取消选择                
                    $currentCheckbox.prop("checked", false);
                }else {               
                   $currentCheckbox.prop("checked", true);// 如果之前没有选中,则选择
                }
            }
            
            //方法2:直接取当前标签的checked属性的相反值
            for (let i=0;i<$checkboxs.length;i++){
                var $currentCheckbox = $($checkboxs[i]);
                var flag = $currentCheckbox.prop("checked");
                $currentCheckbox.prop("checked", !flag)
            }
            
            //方法3:
            $('td input').each(function () {
                $(this).prop('checked', !$(this).prop('checked'));
            }
        });
    </script>
    </body>
    View Code
    11.57 标签操作之文档处理
    //内部
    $(A).appendTo(B)        // 把A追加到B内部的最后面
    $(A).prependTo(B)       // 把A前置到B内部的最前面
    //内部
    $(A).append(B)  // 把B追加到A内部的最后
    $(A).prepend(B) // 把B前置到A内部的最前面
    //外部
    $(A).insertAfter(B)     // 把A放到B外部的后面
    $(A).insertBefore(B)    // 把A放到B外部的前面
    //外部
    $(A).after(B)    // 把B放到A外部的后面
    $(A).before(B)  // 把B放到A外部的前面

    移除和清空元素:

    $('.p1').remove()           //从DOM中删除所有匹配的元素(标签和事件),被删掉的对象做返回值,包括删除自身
    var $btn=$('button').detach()      // 删除标签,保留事件,被删掉的对象做返回值
    $('ul').append($btn)               //此时按钮能追加到ul中
    ​
    $('.p1').empty()                  // 清空匹配的元素集合中所有的子节点,不包括自身

    替换:

    $('.p1').replaceWith($('.p2'))        //后面的替换前面的所有.p1标签
    $('.p1').replaceAll($('.p2'))        //前面的替换后面的所有.p2标签

    克隆:

    .clone(true)    //不加参数true,克隆标签但不克隆标签带的事件,加参数true,克隆标签并且克隆标签带的事件
    11.571 克隆示例
    <head> 
    <style>
        #b1 {
          background-color: deeppink;
          padding: 5px;
          color: white;
          margin: 5px;
        }
        #b2 {
          background-color: dodgerblue;
          padding: 5px;
          color: white;
          margin: 5px;
        }
    </style>
    </head>
    <body>
    <button id="b1">屠龙宝刀,点击就送</button>
    <button id="b2">屠龙宝刀,点击就送</button>
    <script src="jquery-3.3.1.min.js"></script>
    <script>  
      $("#b1").on("click", function () {        // clone方法不加参数true,克隆标签但不克隆标签带的事件
        $(this).clone().insertAfter(this);
      });  
      $("#b2").on("click", function () {        // clone方法加参数true,克隆标签并且克隆标签带的事件
        $(this).clone(true).insertAfter(this);
      });
    </script>
    </body>
    View Code
  • 相关阅读:
    ARC109C Large RPS Tournament 机智
    ABC186F Rook on Grid 树状数组
    二分查找
    CF1445D. Divide and Sum 组合数
    APP测试方法分享
    面试常见问题
    接口测试基础知识
    接口测试一
    web端测试
    Jmeter简介
  • 原文地址:https://www.cnblogs.com/mylu/p/11385885.html
Copyright © 2020-2023  润新知