前端修炼——jQuery高级!



内容概述:
    事件冒泡、事件委托
    DOM 增删改查
    json
    ajax 了解


事件冒泡

什么是事件冒泡:

事件从子标签传递到父标签

最顶层是 document 对象(有些浏览器是 window)。

作用:

事件冒泡允许多个操作被击中处理(把事件处理器添加到一个父级元素上,避免把事件处理器添加到多个子级元素上),它还可以让你在对象层的不同级别捕获事件。

如何解决事件冒泡

问题:操作子元素的时候,同时也可以操作父元素

阻止事件冒泡 :event.stopPropagation()

阻止默认行为:event.stopPropagation()

合并写法:

return false

事件冒泡的应用

**事件委托:**让 A 标签给 B 标签绑定事件

在父元素上可以给子元素添加统一的事件

 $list.delegate('li', 'click', function() {
        $(this).css({background:'red'});
    });
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .grandfather {
            width: 300px;
            height: 300px;
            background: yellow;
            position: relative;
        }
        .father {
            width: 200px;
            height: 200px;
            background: green
        }
        .son {
            width: 100px;
            height: 100px;
            background: gray;
            position: absolute;
            left: 0px;
            top: 400px;
        }    
    </style>
    <script src="js/jquery-1.12.4.min.js"></script>
    <script>
        $(function(){

            // 发不发生事件和绑定 click 没有关系,
            // 不绑定也会点击,不过没有绑定要执行的函数

            // $('.son').click(function(){
            //     console.log('1')

            //     // 阻止事件冒泡的简略写法
            //     return false
            // })

            // $('.father').click(function(ev){
            //     console.log('2')
            //     //  阻止事件冒泡的完整写法
            //     ev.stopPropagation()
            // })

            $('.grandfather').click(function(){
                console.log('3')
            })

            $(document).click(function(){
                console.log('4')
            })

        })
    
    </script>
</head>
<body>
    <div class="grandfather">
        <div class="father">
            <div class="son"></div>
        </div>
    </div>
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="js/jquery-1.12.4.min.js"></script>
    <script>
        $(function(){
            var li = $('.list li');
            var ul = $('.list');

            // li.click(function(){
            //     $(this).css({'background':'red'});
            // })

            // 上面的写法性能不高,可以写成事件委托的形式
            ul.delegate('li','click',function(){
                // $(this) 指的是发生事件冒泡的子级
                $(this).css('background','red')
            })
            
        })    
    </script>
</head>
<body>
    <ul class="list">
        <li>列表文字</li>
        <li>列表文字</li>
        <li>列表文字</li>
        <li>列表文字</li>
        <li>列表文字</li>
        <li>列表文字</li>
        <li>列表文字</li>
        <li>列表文字</li>
    </ul>
</body>
</html>



DOM 增删改查

元素节点操作指的是改变html的标签结构,它有两种情况:

1、移动现有标签的位置

2、将新创建的标签插入到现有的标签中

移动或者插入标签的方法 :

append()和appendTo():在现存元素的内部,从后面放入元素

prepend()和prependTo():在现存元素的内部,从前面放入元素

after()和insertAfter():在现存元素的外部,从后面放入元素

before()和insertBefore():在现存元素的外部,从前面放入元素

删除标签:

remove()

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="js/jquery-1.12.4.min.js"></script>
    <script>
        $(function(){
            var div = $('#div1');
            var h01 = $('#h01');
            var h02 = $('#h02');
            var div2 = $('#div2');

            // To   主语宾语 对掉
            // 当前元素里面的后面要放另外一个元素
            // div.append(h01);

            
            // 当前元素要放到另外一个元素里面的后面
            h01.appendTo(div);

            // 当前元素里面的前面要放另外一个元素
            // div.prepend(h02);

            // 当前元素要放到另外一个元素的里面的前面
            h02.prependTo(div);

            // 当前的元素的外面的后面要放另外一个元素
            // div.after(div2);

            // 当前元素要放到另外一个元素的外面的后面
            div2.insertAfter(div);


            // 创建新标签
            // 创建一个空的 div
            var div3 = $('<div>');
            // 创建一个包含内容的 div
            var div4 = $('<div>新创建的div2</div>');

            
            // 当前元素的外面的前面要放另外一个元素
            div.before(div3);

            // 当前元素要放到另外一个元素的外面的前面
            div4.insertBefore(div);

            // 删除标签
            div3.remove();

        })

    </script>
</head>
<body>
    <h3 id="h01">这是div1外面的h3标签</h3>
    <h1 id="h02">这是div1外面的h1标签</h1>
    <div id="div2">这是div1上面的div</div>
    <div id="div1">
        <h2>这是div1里面的h2标签</h2>
        <p>这是div1里面的p标签</p>
    </div>
</body>
</html>



json

网络之间传输数据

JavaScript 中创建对象的两种方式:

1、new object()

2、{} 键值对

json是 JavaScript Object Notation 的首字母缩写,单词的意思是javascript对象表示法,这里说的json指的是类似于javascript对象的一种数据格式对象,目前这种数据格式比较流行,逐渐替换掉了传统的xml数据格式。

json数据对象类似于JavaScript中的对象,但是它的键对应的值里面是没有函数方法的,值可以是普通变量,不支持undefined,值还可以是数组或者json对象。

与JavaScript对象写法不同的是,json对象的属性名称和字符串值需要用双引号引起来,用单引号或者不用引号会导致读取数据错误。

json格式的数据:

{
    "name":"tom",
    "age":18
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script>

        // json 对象的属性名称和字符串值必须使用双引号
        var data01 = {
            "name":"tom",  
            "age":19

        }
        
        // alert(data01.name)
        
        var data02 = [
            {"name":'jack',"age":80},
            {"name":'rose',"age":18}
        ]

        alert(data02[0].name)

    </script>
</head>
<body>
    
</body>
</html>



ajax

可以实现局部刷新

ajax一个前后台配合的技术,它可以让javascript发送http请求,与后台通信,获取数据和信息。ajax技术的原理是实例化xmlhttp对象,使用此对象与后台通信。jquery将它封装成了一个函数$.ajax(),我们可以直接用这个函数来执行ajax请求。

ajax需要在服务器环境下运行。

$.ajax使用方法

常用参数:
1、url 请求地址
2、type 请求方式,默认是’GET’,常用的还有’POST’
3、dataType 设置返回的数据格式,常用的是’json’格式,也可以设置为’html’
4、data 设置发送给服务器的数据
5、success 设置请求成功后的回调函数
6、error 设置请求失败后的回调函数
7、async 设置是否异步,默认值是’true’,表示异步

以前的写法:

$.ajax({
    url: '/change_data',
    type: 'GET',
    dataType: 'json',
    data:{'code':300268}
    success:function(dat){
        alert(dat.name);
    },
    error:function(){
        alert('服务器超时,请重试!');
    }
});

新的写法(推荐):

$.ajax({
    url: '/change_data',
    type: 'GET',
    dataType: 'json',
    data:{'code':300268}
})
.done(function(dat) {
    alert(dat.name);
})
.fail(function() {
    alert('服务器超时,请重试!');
});

赶着放假,水上一波。。。。

祝大家中秋快乐!

猜你喜欢

转载自blog.csdn.net/qyf__123/article/details/82826049