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
原文地址:https://www.cnblogs.com/shanjinghao/p/9146854.html