zoukankan      html  css  js  c++  java
  • Jquery(3)

    DOM创建节点
    let trEle = document.createElement('tr');
    HTML创建节点
    var textNode1 = '<p>我是通过HTML创建出来的</p>';
    JQ创建节点的方式
    var textNode2 = $('<p></p>').text('我是通过JQ创建出来的')
    $('body').html(`<p>123</p>`)

    节点拼接进文档
    $('a').append('b')

    常见的事件

    click(function(){...})        点击触发事件
    hover(function(){...})        鼠标移动到上面触发
    blur(function(){...})         鼠标取消选中触发
    focus(function(){...})        鼠标选中触发
    change(function(){...})       元素的值发生变化的时候触发,常用与select
    keyup(function(){...})        键盘按键按下的时候触发
    keydown(function(){...})      键盘按键松开的时候触发    

    常见应用场景

    hover事件有2个匿名函数,移入和移出
    hover --购物车按钮
    focus blur --input框获得或丢失焦点
    change --
    keyup keydown --批量操作
    

     

     button onclick='foo()'

    绑定事件的两种方式

    1. click(function(){...})   -----绑定点击事件
    
    2. $('父标签').on("对象","事件名称", function(){...})  ----事件委托
    事件委托是通过事件冒泡的原理,利用父标签去捕获子标签的事件。
    
        1.常用来作用于哪些会在未来创建或者增加的元素上面,使未来元素也能继承特点功能
        2.实现的原理时冒泡原理,即从触发者本身开始往上一级查找绑定的事件,直到找到为止,类似气泡从水底上浮
    
    事件委托在表格的增删改查中有使用
    $("对象").on("事件名称", function(){...})  ----另一种事件的写法,但是没有使用事件冒泡

    阻止后续事件的执行

    return false; // 常见阻止表单提交等
    
    原因:submit自带一个提交的事件,如果在绑定一个事件就相当于绑定一个操作会执行2个事件,一般在submit之前都会对数据进行校验通过后才会执行submit,实现的方式就是在判断的最后加上return false
    

    页面jsj加载

    可以很好的避免了在文档之前先加载了JS,而导致无法找到选择器的问题
    方式一:$(document).ready(function(){
                        // 在这里写你的JS代码...
                })
            文档加载完后加载js,一般js写在body标签最底下  
    
    方式二:$(function(){
                // 你在这里写你的代码
                })
    
    方式一和方式二作用相同,写法不同,一的可读性更强
    不过大多数情况都是直接将js写在body标签的最下面
    

     

    js动画

    // 基本
    show([s,[e],[fn]])        ------展示
    hide([s,[e],[fn]])        ------隐藏
    toggle([s],[e],[fn])      ------以上操作取反
    // 滑动
    slideDown([s],[e],[fn])   ------类似窗帘的效果==窗帘拉上去
    slideUp([s,[e],[fn]])     ------。。。。窗帘拉下来
    slideToggle([s],[e],[fn]) ------以上操作取反
    // 淡入淡出
    fadeIn([s],[e],[fn])      ------慢慢的消失
    fadeOut([s],[e],[fn])     ------慢慢的出现
    fadeTo([[s],o,[e],[fn]])  ------制定移动到某个地方
    fadeToggle([s,[e],[fn]])  ------以上操作取反
    // 自定义(了解即可)
    animate(p,[s],[e],[fn])  
    

      

    each方法

    循环打印列表,循环取出节点,并对节点操作(加类名)

    方式一

    $.each()

    jquery对象.each

    方式二

    <html>
    <head>
    <script type="text/javascript" src="/jquery/jquery.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
      $("button").click(function(){
        $("li").each(function(){
          alert($(this).text())
        });
      });
    });
    </script>
    </head>
    <body>
    <button>输出每个列表项的值</button>
    <ul>
    <li>Coffee</li>
    <li>Milk</li>
    <li>Soda</li>
    </ul>
    </body>
    </html>

    跳出each循环

     

     data方法

    赋值(数字)$('.modal').data('tr',1);
    赋值(字符串)$('.modal').data('tr','hello');
    赋值(jq对象)$('.modal').data('tr',$('html'));
    查$('.modal').data('tr');
    删$('.modal').removeData('tr')
    +//新思路:jQuery对象代表的是对象被修改,对象所在的节点的数据也会被修改,$('.modal')这个对象填谁都可以,只要能保证jq对象数据不会被清除就行,其次需要考虑多次编辑的情况下,之前保留的jq对象数据会不会残留,导致后面回填数据错误,
    // 实际测试好像并不影响,可能是数据对象呗重新赋值,所以老数据呗新数据替换掉了-.-||,实测以上全错,编辑之后再新增,会出错,新增的对象不会出现,会对被编辑的对象做修改,
    // 解决方案,每次使用完jq对象,就.removeDate('key')清除原来的对象

    例子详见表格的增删改以及模态框

    表格拼接

               let username=$('#username').val();
                let hobby=$('#hobby').val();
        //       把值拼接给TR>TD(创建节点是显示的,必须在append之后才会显示)
                let trEle = document.createElement('tr');
                let td1 = document.createElement('td');
                td1.innerText=$('table tr').length;
                $(trEle).append(td1);
                let td2 = document.createElement('td');
                td2.innerText=username;
                $(trEle).append(td2);
                let td3 = document.createElement('td');
                td3.innerText=hobby;
                $(trEle).append(td3);
                let td4 = document.createElement('td');
                td4.innerHTML=`<input type="button" value="编辑" class="edit">
                <input type="button" value="删除" class="delete">`;
                $(trEle).append(td4);
                $('table tbody').append(trEle);

     

    表格内id自增写法

    $('table').on('click','.delete',function () {
    //        删除当前行
            $(this).parent().parent().remove();
            //删除之后动态调整序号
            let len = $('table tr').length;
            for (let i = 1; i < len; i++) {
                $('table tr:eq(' + i + ') td:first').text(i);
            }
        });
    

      

    表格的增删改以及模态框

    <!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.4);
                z-index: 9;
            }
    
            .modal {
                position: absolute;
                left: 50%;
                top: 50%;
                height: 300px;
                 400px;
                background-color: white;
                z-index: 100;
                margin-top: -150px;
                margin-left: -200px;
            }
    
            .hide {
                display: none;
            }
        </style>
    </head>
    <body>
    
    <button id="add">新增</button>
    
    <table border="1">
        <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="编辑" class="edit">
                <input type="button" value="删除" class="delete">
            </td>
        </tr>
        <tr>
            <td>2</td>
            <td>Alex</td>
            <td>吹牛逼</td>
            <td>
                <input type="button" value="编辑" class="edit">
                <input type="button" value="删除" class="delete">
            </td>
        </tr>
        <tr>
            <td>3</td>
            <td>苑昊</td>
            <td>不洗头</td>
            <td>
                <input type="button" value="编辑" class="edit">
                <input type="button" value="删除" class="delete">
            </td>
        </tr>
    
        </tbody>
    </table>
    
    
    <div class="cover hide"></div>
    <div class="modal hide">
        <p><input type="text" id="username"></p>
        <p><input type="text" id="hobby"></p>
        <p>
            <button id="submit">提交</button>
            <button id="cancel">取消</button>
        </p>
    </div>
    
    <script src="jquery-3.3.1.min.js"></script>
    <script>
        function hideModal() {
            $('.cover,.modal').addClass('hide');
        }
        function showModal() {
            $('.cover,.modal').removeClass('hide');
        }
        $('#add').click(function () {
            showModal();
    
        });
        $('#submit').click(function (index) {
            hideModal();
    //        打开模态框
    //        获取input的值
            let type = $($('tbody tr').eq[index]).data('type');
            console.log(type);
            if (typeof ($('.modal').data('tr'))==='object'){
    //            let username = $($('tbody tr').eq[index]).data('tr1');
    //            let hobby = $($('tbody tr').eq[index]).data('tr2');
    //            $($($('tbody tr')[index]).children()[1]).text(username);
    //            $($($('tbody tr')[index]).children()[2]).text(hobby);
                let new_username=$('#username').val();
                let new_hobby=$('#hobby').val();
                $($('.modal').data('tr').children()[1]).text(new_username);
                $($('.modal').data('tr').children()[2]).text(new_hobby);
                $('.modal').removeData('tr')
            }
            else {
                let username=$('#username').val();
                let hobby=$('#hobby').val();
        //       把值拼接给TR>TD(创建节点是显示的,必须在append之后才会显示)
                let trEle = document.createElement('tr');
                let td1 = document.createElement('td');
                td1.innerText=$('table tr').length;
                $(trEle).append(td1);
                let td2 = document.createElement('td');
                td2.innerText=username;
                $(trEle).append(td2);
                let td3 = document.createElement('td');
                td3.innerText=hobby;
                $(trEle).append(td3);
                let td4 = document.createElement('td');
                td4.innerHTML=`<input type="button" value="编辑" class="edit">
                <input type="button" value="删除" class="delete">`;
                $(trEle).append(td4);
                $('table tbody').append(trEle);
            }
        });
    //    事件委托,冒泡事件(从当前向上一级找事件触发的函数)
        $('table').on('click','.delete',function () {
    //        删除当前行
            $(this).parent().parent().remove();
            //删除之后动态调整序号
            let len = $('table tr').length;
            for (let i = 1; i < len; i++) {
                $('table tr:eq(' + i + ') td:first').text(i);
            }
        });
        $('table').on('click','.edit',function () {
            showModal();
    //        将列表的信息填入模态框的input中
            let tr = $(this).parent().parent();
            let username=$(tr.children()[1]).text();
            let hobby=$(tr.children()[2]).text();
            console.log(username);
            console.log(hobby);
            $('#username').val(username);
            $('#hobby').val(hobby);
    +//新思路:jQuery对象代表的是对象被修改,对象所在的节点的数据也会被修改,$('.modal')这个对象填谁都可以,只要能保证jq对象数据不会被清除就行,其次需要考虑多次编辑的情况下,之前保留的jq对象数据会不会残留,导致后面回填数据错误,
    // 实际测试好像并不影响,可能是数据对象呗重新赋值,所以老数据呗新数据替换掉了-.-||,实测以上全错,编辑之后再新增,会出错,新增的对象不会出现,会对被编辑的对象做修改,
    // 解决方案,每次使用完jq对象,就.removeDate('key')清除原来的对象
            $('.modal').data('tr',tr);
    
    //自己的思路
    //        let new_username=$('#username').val();
    //        let new_hobby=$('#hobby').val();
    //        let index=$(this).parent().parent().index();
    //        console.log(index);
    //        tr.data({'type':1,'index':index,'tr1':123,'tr2':1234});
    //        console.log(tr.data());
    //        return tr.data();
    
    //点击提交按钮时,怎么判断用哪个功能?
    //        type(jquery对象)  如果是对象就是object类型,否则是undefined
    //老师的方法我不会
    //        let tr = $(this).parent().parent();
    //        $(this).data('tr',tr);
        });
    
        $('#cancel').on('click',function () {
            hideModal();
            $('#username').val('');
            $('#hobby').val('');
        })
    
    </script>
    
    </body>
    </html>
    View Code
  • 相关阅读:
    Counting Sort and Radix Sort
    Naïve Bayes
    windows c/c++ 代码运行时间,毫秒级
    数学基础:四、树的应用1(利用树结构存储字典表)(待优化)
    数学基础:三、动态规划2(求解凑齐钱的最小张数)
    数学基础:三、动态规划1(求解编辑距离)
    数学基础:二、组合算法(递归)
    数学基础:一、排列算法(递归)
    idea注释模版设置
    幂等性的实现
  • 原文地址:https://www.cnblogs.com/shanjinghao/p/9146854.html
Copyright © 2011-2022 走看看