进阶14

题目1: jQuery 能做什么?
  • 选择网页元素
  • 改变结果集
  • 元素的操作: 取值和赋值
  • 元素的操作: 移动
  • 元素的操作: 复制、删除和创建
  • 工具方法
  • 特殊效果
  • AJAX
题目2: jQuery 对象和 DOM 原生对象有什么区别?如何转化?

区别
$('#container') // [div#container]
document.querySelector('#container') // <div id="container">...</div>
$('#container') === document.querySelector('#container') // false
jQuery 对象: jQuery库里面的API,都是jQuery对象的API。
原生对象对应用原生对象的方法。
举列说明:
$('#container').html('123'); // jQuery对象

document.querySelector('#container').innerHTML = '456'; // 原生对象
原生对象和jQuery对象之间,我们究竟应该如何转换。
$('#container li') // jQuery 对象
$('#container li')[0] // 添加一个下标, 就变成了原生对象
document.querySelector('.active'); // 原生对象
$(document.querySelector('.active')); // 只要用$()包裹起来,就变成了jQuery对象

题目3:jQuery中如何绑定事件?bind、unbind、delegate、live、on、off都有什么作用?推荐使用哪种?使用on绑定事件使用事件代理的写法?

绑定事件
在1.7之前的版本中jQuery处理事件有多个方法,(google搜索:jquery live bind degelate)
作用各不相同,后来统一的使用on/offf方法
.on(events[,selector][,data],handler(eventObject))
参数的意义
1.events: 一个或多个空格分隔的事件类型和可选的命名空间,或仅仅是命名空间,比如"click",
"keydown.myPlugin", 或者".myPlugin"
2.selector: 一个选择器字符串,用于过滤出被选中的元素中能触发事件的后代元素。如果选择器是null
或者忽略了该选择器,那么被选中的元素总是能触发事件
3.data: 当一个事件被触发时,要传递给事件处理函数的event.data
4.handler(eventObject): 事件被触发时,执行的函数。若该函数只是要执行return false的话,
那么该参数位置可以直接写成false.
bind unbind delegate live on off 都有什么作用?

  • bind() 方法将选择的元素绑定一个或者多个事件,当事件发生的时候,触发一个函数。
    用法
    $(selector).bind(event, data, function, map)
    举列说明
//绑定多个事件
$(document).ready(function() {
    $("p").bind("mouseover mouseout", function() {
        $("p").toggleClass("intro");    
    });
});
// 绑定多个事件并且触发函数
$(document).ready(function(){
    $("button").bind({
        click:function(){$("p").slideToggle();},
        mouseover:function(){$("body").css("background-color", "#E9E9E4");},  
        mouseout:function(){$("body").css("background-color", "#FFFFFF");}  
    });
});
// pass along data to the function
function handlerName(e){
    alert(e.data.msg);
}
$(document).ready(function(){
    $("p").bind("click", {msg: "You just clicked me!"}, handlerName)
});
  • The unbind() 方法为选择元素去除所有事件

$(selector).unbind(event, function, eventObj)

举列说明

// 解绑一个特定的函数
function alertMe() {
    alert("Hello World!");
}
$(document).ready(function(){
    $("p").click(alertMe);
    $("button").click(function(){
        $("p").unbind("click", alertMe);
    });
});
// unbind an event handler using an event object
<script>
$(document).ready(function(){
    var x = 0;
    $("p").click(function(event){
        $("p").animate({fontSize: "+=5px"});
    x++;
    if (x >= 2) {
        $(this).unbind(event);
    }
    });
});
</script>
<body>
<p style="font-size:20px;">Click this p element to increase its size. The size can only be increased 2 times.</p>
</body>
  • delegate 方法
    $(selector).delegate(childSelector, event, data, function)
    绑定一个事件或多个事件为指定的元素,这个指定的元素是选择的元素的子元素,当事件触发的时候,运行指定的函数。
    举列说明
// 1、为将来的元素添加事件
$(document).ready(function(){
    $("div").delegate("p", "click", function(){
        $(this).slideToggle();
    });
    $("button").click(function(){
        $("<p>This is a new paragraph.</p>").insertAfter("button");
    });
});
// 2、pass along data to the function
<script>
function handlerName(e){
    alert(e.data.msg);
}
$(document).ready(function(){
    $("p").delegate({msg: "You just clicked me!"}, "click", handlerName)
});
</script>
  • live 方法

$(selector).live(event, data, function)

live() 方法 绑定一个或多个事件为选择的元素,当事件触发的时候,运行一个指定函数

举列说明

// 添加事件为之后的元素
<script>
$(document).ready(function(){
    $("p").live("click", function(){
        $(this).slideToggle();
    });
    $("button").click(function(){
        $("<p>This is a new paragraph.</p>").insertAfter("button");
    });
});
</script>
  • on 方法
    $(selector).on(event, childSelector, data, function, map)
    绑定一个或多个事件为选择的元素和子元素
    举列说明
// Attach multiple events
<script>
$(document).ready(function(){
    $("p").on("mouseover mouseout", function(){
        $(this).toggleClass("intro");
    });
});
</script>
//绑定多个事件使用参数映射的方式
$(document).ready(function(){
    $("p").on({
        mouseover: function(){
            $("body").css("background-color", "lightgray");
        },  
        mouseout: function(){
            $("body").css("background-color", "lightblue");
        }, 
        click: function(){
            $("body").css("background-color", "yellow");
        }  
    });
});
// 在一个元素上绑定定制的事件
$(document).ready(function(){
    $("p").on("myOwnEvent", function(event, showName){
        $(this).text(showName + "! What a beautiful name!").show();
    });
    $("button").click(function(){
        $("p").trigger("myOwnEvent", ["Anja"]);
    });
});
//添加事件为将来的元素
$(document).ready(function(){
    $("div").on("click", "p", function(){
        $(this).slideToggle();
    });
    $("button").click(function(){
        $("<p>This is a new paragraph.</p>").insertAfter("button");
    });
});
// 去除一个事件 用off()
$(document).ready(function(){
    $("p").on("click", function(){
        $(this).css("background-color", "pink");
    });
    $("button").click(function(){
        $("p").off("click");
    });
});
  • off 方法
    off() 方法最多的被使用去去除事件,这些事件被绑定了on方法

$(selector).off(event, selector, function(eventObj), map)

举列说明

//去除所有的被on()方法添加的点击事件
$(document).ready(function(){
    $("body").on("click", "p", changeSize);
    $("body").on("click", "p", changeSpacing);
    $("button").click(function(){
        $("body").off("click", "p");
    });
});
// 去除一个事件使用事件对象
$(document).ready(function(){
    var x = 0;
    $("p").click(function(event){
        $("p").animate({fontSize: "+=5px"
    });
    x++;
    if (x >= 2) {
        $(this).off(event);
    }
    });
});

事件代理的写法
on 用事件代理的方法

举列说明

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<body>
    <div class="box">
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
        </ul>
    </div>
    <input type="text" id="ipt">
    <button id="btn">添加</button>
    <div id="wrap"></div>
    <script>
        $('.box>ul').on('click.hello', 'li', function() {  // 关键
            // console.log(this);
            var str = $(this).text();
            $('#wrap').text(str);
        })

        $('#btn').on('click', function() {
            var value = $('#ipt').val();
            
            $('.box>ul').append('<li>' + value + '</li>');
        })  

    </script>
</body>
题目4:jQuery 如何展示/隐藏元素?

$(selector).show();
$(selector).hide();

题目5: jQuery 动画如何使用?

举列说明

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<body>
    <div style="width: 200px; height: 200px; background-color: red; position: relative"></div>
    <button id="btn1">变宽</button>
    <button id="btn2">复原</button>
    <button id="btn3">变宽变大移动</button>
    <button id="btn4">多个动画</button>
    <button id="btn5">finish</button>
    <button id="btn6">stop</button>
    <div class="ct">
        <ul>
            <li class="item">
                <h3>标题1</h3>
                <p>内容1</p>
            </li>
            <li class="item">
                <h3>标题2</h3>
                <p>内容2</p>
            </li>
            <li class="item">
                <h3>标题3</h3>
                <p>内容3</p>
            </li>
            <li class="item">
                <h3>标题4</h3>
                <p>内容4</p>
            </li>
        </ul>
    </div>
    <script>
        $('#btn1').on('click', function(e) {
            $('div').animate({width: '400px'});
        });

        $('#btn2').on('click', function() {
            $('div').animate({
                width: '200px',
                height: '200px',
                left: '0px',
                top: '0px',
                opacity: 1
            }, 500);
        });
        $('#btn3').on('click', function() {
            $('div').animate({
                width: '150px',
                height: '150px',
                left: '100px',
                top: '100px',
                opacity: 1
            }, 500, function() {
                alert('hello, world');
            });
        });

        var actions = [
            {width: 80, height: 80, left: 0, top: 0},
            {left: '200px'},
            {top: '200px'},
            {left: '0px'},
            {top: '0px'},
            {width: '80px', height: '80px'}
        ]

        
        $('#btn4').on('click', function() {
            $('div').animate({width: '150px', height: '150px', left: 0, top: 0});

            // $('div').animate({width: '80px', height: '80px'})
                //  .animate({left: '200px'})
                //      .animate({top: '200px'})
                //  .animate({left: '0px'})
                //  .animate({top: '0px'});

            // $('div').animate({left: '0px'});
            // $('div').animate({top: '0px'});
            //$('div').animate({width: '80px', height: '80px'}, function() {

            //});

            actions.forEach(function(action, idx) {
            // console.log(arguments);
            // console.log(action, idx);
            $('div').animate(action, 2000);
        })

        })

        $('#btn5').click(function() {
            console.log('finish');
            $('div').finish();
            // 点击finish, 立刻就清除动画队列
        })

        $('#btn6').click(function() {
            console.log('stop');
            $('div').stop(true, true);
            // 点击stop, 立刻把当前队列执行完
        });
        
        $('.ct .item').on('click', function() {
            $(this).find('p').slideToggle(100);
            $(this).siblings().find('p').slideUp(); 
        });

    </script>
</body>
题目6:如何设置和获取元素内部 HTML 内容?如何设置和获取元素内部文本?

$(selector).html(); // 获取
$(selector).html('想要设置的html'); // 设置
$(selector).text(); // 获取内部文本
$(selector).text('想要设置的文本');

题目7:如何设置和获取表单用户输入或者选择的内容?如何设置和获取元素属性?

$('input').val(); // 获取
$('input').val('想要设置的内容')
$(selector).attr('id'); // 获取元素属性
$(selector).attr('id', '设置的元素属性值');

题目8: 使用 jQuery实现如下效果

效果
源代码

题目9:. 使用 jQuery 实现如下效果

效果
源代码

题目10:实现如下效果

效果
源代码

题目11: 模仿视频6,完成 左右切换的 Tab 效果

效果
源代码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容