进阶任务14

问答部分

一、说说库和框架的区别?

  • 库~是一个提供了封装好很多方法的工具,在这个工具里面,用与不用都是由你决定,控制权在于使用者
  • 框架~提供整套的解决方案,你可以往里面填充你的内容,但是你要遵循框架创造一些规则和范例,控制权在于框架

二、jQuery能做什么?

jQuery能做如下操作:

  • 获取HTML中的元素,如下代码:
$("ul li");
$("li").next(".s");
$("li").parent();
  • dom操作,如下代码:
$("#ct").append(".newdiv");
  • css操作,如下代码:
$("p").css("color","red");
  • 事件处理,如下代码:
//绑定事件
$("#btn").on("click",function(){
              console.log("event handling");
          });
//解除事件
$("#btn").off();
  • 动画操作,如下代码:
$(".box1").hide(1500,function(){
              $(".box2").hide(1500,function(){
                  $(".box3").hide(1500);
              });
          });
  • ajax操作

三、jQuery对象和DOM原生对象有什么区别?如何转化?

  • 二者区别
  • jQuery对象是在DOM原生对象上做了一层包装后的对象,只能够使用jQuery对象的方法
  • DOM原生对象是通过Javascript方法所获得的的对象,也只能使用Javascript所提供的的方法
  • 用法上的不同,如下代码
      //DOM原生对象
      var btn = document.getElementById("clickme");
      btn.innerHTML = "jirengu";
      btn.setAttribute("class","btn");
      //jQuery对象
      var $btn = $("#clickme");
      $btn.html("jirengu");
      $btn.attr("class","button");
  • 两者的转化:
  • jQuery对象转化为DOM对象
          //数组下标的转化方式
        var $li = $("li");//jQuery对象
          var li = $li[2];//DOM对象
          //jQuery的get(index)方法
          //当get()不写参数把所有对象转为DOM对象返回
          var $li = $("li");//jQuery对象
          var li = $li.get(3);//DOM对象
  • DOM对象转化为 jQuery对象
          //用$()把DOM原生对象包装起来,就可以转换为jQuery对象,即$(DOM对象)
          var li = document.getElementsByTagName("li");//DOM对象
          var $li = $(li);//jQuery对象

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

  • .bind()~用于直接附加一个事件处理程序到元素上==>(注意:在jQuery3.0中,.bind()已被标记为弃用),用法如下:
$("#btn").bind("mouseenter mouseleave",function(){
       console.log(111);
});
  • unbind()~用于移除.bind()绑定的事件处理程序==>(注意:在jQuery3.0中,.unbind()已被标记为弃用),用法如下:
$("#btn").unbind();//移除#btn上所有绑定的处理程序
$("#btn").unbind("click");//移除#btn上所有绑定的click处理程序
  • live()~该方法将委托的事件处理程序附加到一个页面的document元素,从而简化了在页面上动态添加的内容上事件处理的使用==>(注意:在jQuery1.7中,.live()已被标记为弃用),用法如下:
$(".pic").live("click",function(){
       $(this).hide("slow");
});
  • delegate()~为所有匹配选择器(selector参数)的元素绑定一个或多个事件处理函数,基于一个指定的根元素的子集(匹配的元素包括那些目前已经匹配到的元素,也包括那些今后可能匹配到的元素)==>(注意:在jQuery3.0中,.delegate()已被标记为弃用),用法如下:
$(".content").delegate(".btn","click",function(){
    console.log("delegate()");
});
  • on()~在选定的元素上绑定一个或多个事件处理函数==>(推荐使用.on()方法进行事件绑定
//.on()的语法如下
.on(events[,selectors][,data],handler);
  • events~一个或多个空格分隔的事件类型和可选的命名空间,或仅仅是命名空间,比如"click""mouseenter mouseleave""keydown.myPlugin"".myPlugin",命名空间时如下代码:
            function myHandler(){
                console.log(111);
            }
            //为所有类名为items的元素绑定click事件,定义在test和foo两个命名空间下
            $(".items").on("click.test.foo",myHandler);
            // 触发所有click事件
            $("#btn").trigger("click");
            // 触发定义在test命名空间下的click事件
            $("#btn").trigger("click.test");
            // 触发定义在foo命名空间下的click事件
            $("#btn").trigger("click.foo");
            // 触发同时定义在test和foo两个命名空间下的click事件
            $("#btn").trigger("click.test.foo");
  • selectors~一个选择器字符串,用于过滤出被选中的元素中能触发事件的后代元素;如果选择器是 null 或者忽略了该选择器,那么被选中的元素总是能触发事件,如下代码:
           $("#ct").on("click",".items",function(){
               console.log(111);
           });
  • data~当一个事件被触发时,要传递给事件处理函数的event.data,如下代码:
            $("#btn").on("click",{name:"dp",age:25},function(event){
                console.log(event.data);
            });
  • handler~事件被触发时,执行的函数。若该函数只是要执行return false的话,那么该参数位置可以直接简写成 false,如下代码:
            $("#btn").on("click",function(){
                console.log(111);
            });
  • off()~移除.on()上绑定的事件处理函数==>(推荐使用.off()方法进行事件移除
           //.off()的语法如下
           .off(events[,selectors][,handler]);
           //移除所有事件
           $("#btn").off();
           //移除元素上所有的代理事件,而不移除任何非代理事件,请使用特殊值 "**"
           $("#btn").off("click","**");
           //通过命名空间来移除事件
           function myHandler(){
               console.log(111);
           }
           $("#btn1").on("click.test.foo",myHandler);
           $("#btn1").off("click.test");
           $("#btn1").off("clck.test.foo");

五、jQuery如何展示元素和隐藏元素?

  • 基础方法
  • .show()~该方法展示元素,用法如下:
  $(".pic").show();
  $(".pic").show("fast");
$("#btn").on("click",function(){
   $(".items").show("slow",function(){
           //to do...
       });
});
  • .hide()~该方法隐藏元素,用法如下:
$(".pic").hide();
$(".pic").hide("fast");
$("#btn").on("click",function(){
   $(".items").hide("slow",function(){
           //to do...
       });
});
  • .toggle()~该方法显示或隐藏元素,用法如下:
$(".pic").toggle();
$(".pic").toggle(200);
$("#btn").on("click",function(){
   $(".items").toggle("slow",function(){
           //to do...
       });
});

比如如下GIF:


show()/hide()/toggle()
  • 渐变(淡入淡出)
  • .fadeIn()~通过淡入的方式显示匹配元素,用法如下:
$(".pic").fadeIn();
$(".pic").fadeIn("fast");
$("button").on("click",function(){
   $("div").fadeIn("slow",function(){
           //to do...
       });
});
  • .fadeOut()~通过淡出的方式隐藏匹配元素,用法如下:
$(".pic").fadeIn();
$(".pic").fadeIn(200);
$("button").on("click",function(){
   $("div").fadeOut("slow",function(){
           //to do...
       });
});
  • .fadeToggle()~通过匹配的元素的不透明度动画,来显示或隐藏它们,方法执行匹配元素的不透明度动画,用法如下:
$(".pic").fadeToggle();
$(".pic").fadeToggle("slow");
$("button").on("click",function(){
   $("div").fadeToggle("slow",function(){
           //to do...
       });
});
  • .fadeTo()~调整匹配元素的透明度,方法通过匹配元素的不透明度做动画效果,用法如下:
$("img").fadeTo("slow", 0.5, function() {
 // to do...
});

比如如下GIF:


渐变
  • 滑动
  • .slideDown()~用滑动动画显示一个匹配的元素,方法将给匹配元素的高度的动画,这会导致页面的下面部分滑下去,弥补了显示的方式,用法如下:
$(".pic").slideDown();
$(".pic").slideDown("fast");
$("button").on("click",function(){
   $("div").slideDown(1000,function(){
           //to do...
       });
});
  • .slideUp()~用滑动动画隐藏一个匹配的元素,方法将给匹配元素的高度的动画,这会导致页面的下面部分滑上去,当一个隐藏动画后,高度值达到0的时候,display 样式属性被设置为none,以确保该元素不再影响页面布局,用法如下:
$(".pic").slideUp();
$(".pic").slideUp("slow");
$("button").on("click",function(){
   $("div").slideUp(1500,function(){
           //to do...
       });
});
  • .slideToggle()~用滑动动画显示或隐藏一个匹配元素,方法将给匹配元素的高度的动画,这会导致页面中,在这个元素下面的内容往下或往上滑,用法如下:
$(".pic").slideToggle();
$(".pic").slideToggle("fast");
$("button").on("click",function(){
   $("div").slideToggle("slow",function(){
           //to do...
       });
});

比如如下GIF:


滑动

六、jQuery动画如何使用?

.animate()~是一种根据一组 CSS 属性,执行自定义动画的方法,其语法如下:

.animate(properties[,duration][,easing][,complete])
.animate( properties, options )
  • properties~一个CSS属性和值的对象,动画将根据这组对象移动,注意以下几点:
    • 所有用于动画的属性必须是数字的,除非另有说明;否则不能使用jQuery的基本功能
    • 属性值被视为一个像素数,除非另有说明;em和%需要指定使用
    • 除了定义数值,每个属性能使用"show"、"hide"、"toggle"
    • 动画属性也可以是一个相对值;如果提供一个+=或-=开始的值,那么目标值就以当前值加上或减去给定的数字来计算
    • 如果元素的定位属性是static,那么他们的定位属性(top、right、 bottom、 left)没有明显的效果
  • 基本用法如下:
            $("#clickme").on("click",function(){
                $("div").animate({
                    left:"+=50",
                    opacity:0.5,
                    height:"toggle"
                },5000,function(){
                    console.log(111);
                });
            });
  • options~一组包含动画选项的值的集合,支持的选项如下:
    • duration(default:400)~一个字符串或者数字决定动画将运行多久
    • easing(default:swing)~一个字符串,表示过渡使用哪种缓动函数
    • queue(default:true)~一个布尔值,指示是否将动画放置在效果队列中。如果为false时,将立即开始动画
    • step~每步动画执行后调用的回调函数,需要注意的是step函数被每个动画元素的每个动画属性调用;其接受两个参数(now: 每一步动画属性的数字值;fx:jQuery.fx 原型对象的一个引用,其中包含了多项属性);比如如下代码
            $("li").animate({
                left:"50",
                height:"50%",
                opacity:0.5
            },{step:function(now,fx){
                var data = fx.elem.id + "" + fx.prop +  ":" + now;
                $("body").append("<div>" + data + "</div>");
            }
            });

七 、如何设置和获取元素内部 HTML内容?如何设置和获取元素内部文本?

  • .html()~设置和获取元素内部的HTML内容,用法如下:
//获取元素内部的HTML内容,包括HTML标记
$("#ct").html();
//设置元素内部的HTML内容
$("#demo").html("<div>jirengu<strong>hunger</strong></div>")
  • .text()~设置和获取元素内部的文本内容,用法如下:
//获取元素内部的文本内容
$("#ct").text();
//设置元素内部的文本内容
$("#demo").text("here is jirengu")

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

  • .val()~设置和获取表单用户输入或选择的内容,用法如下:
//获取
$( "input:checkbox:checked" ).val();
//设置
$( "#username" ).val("hunger");
  • .attr()~获取匹配的元素集合中的第一个元素的属性的值,用法如下:
//获取
$( "ims" ).val("src");
//设置,当设置多个属性,包裹属性名的引号是可选的
$( "img" ).attr({
    alt:"hunger",
    title:"frank"
});

代码部分

一、使用 jquery实现如下效果


二、使用 jquery 实现如下效果,提问:点奢侈品2的时候页面跳到了顶部,可能是什么原因?如何解决

  • 代码2地址
  • 代码2在线预览
  • 点击奢侈品2的时候页面跳到了顶部:是由于a链接有默认行为,而此时的href="#",点击时会跳转到页面顶部,解决方法如下;
//将href属性里的值设置为javascript:如下代码
<a href="javascript:">奢侈品2</a>
//使用preventDefault()取消其默认行为
$("a").on("click",function(){
    event.preventDefault();
});

三、实现如下效果

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

推荐阅读更多精彩内容

  • 问答部分 一、说说库和框架的区别? 库~是一个提供了封装好很多方法的工具,在这个工具里面,用与不用都是由你决定,控...
    dengpan阅读 345评论 1 2
  • 1- jQuery 介绍 jQuery是一个快速、简洁的JavaScript库。jQuery设计的宗旨是“writ...
    osborne阅读 219评论 0 1
  • 读书超过三百本 每天写一千字 每天跑不连续五圈 每天背两首唐诗 每年至少旅游一次 每天平均至少...
    janele阅读 310评论 0 0
  • 每个白天的我都想杀了晚上的我
    vignette阅读 204评论 0 0
  • 突然想起一段真实的案例,几年前有个全民经济调查的栏目在街头巷尾向路人提问,“你知道什么是GDP吗?”,答案五花八...
    基德徐元杰阅读 302评论 6 5