jQuery、DOM&事件

1. 说说库和框架的区别?

  • 类库是实现各种功能的类的集合,可以帮助编程人员简化工作,提高工作效率。就像一个小的工具箱,里面有锤子、剪刀、扳手等之类的工具。
  • 框架是解决方案,集成了最佳实践和可复用的基础结构,是加速和提高系统质量的半成品。

2. jquery 能做什么?

jQuery相较于原生js能用更少的代码,做更多的事情。jQuery可以:

  1. 快速获取文档元素。采用$(),如:$('#header')。为了方便使用者jQuery刻意和CSS选择器使用相同的语法,几乎支持所有类型的CSS3选择器,当然也有一些其特定的选择器。
  2. 提供漂亮的页面动态效果。jQuery内置了一系列动画效果,如淡入、淡出、显示、隐藏等,还有自定义动画.animate()。
  3. 提供常用函数。如.each( function(index, Element) )遍历一个jQuery对象,为每个匹配元素执行一个函数。
  4. 事件处理更好的实现了浏览器兼容。
  5. 操作DOM元素,更改网页内容。

3. jquery 对象和 DOM 原生对象有什么区别?如何转化?

jQuery对象是一个类数组对象(用[]包裹的),用$()方法得到的都是jQuery对象,jQuery对象可以使用jQuery自带的属性和方法。

2.jpg

如图用$('#hd')获得的是jQuery对象,在$('#hd')后面加上[index]则获得DOM原生对象,
若是.eq(index)则获取的是jQuery对象。jQuery对象转原生对象还可以用.get([index])方法获取指定index的DOM 对象。.get()不写参数就是把所有转化为jQuery对象再返回。
DOM原生对象拥有其特有属性,例如.innerText(),.target等。将DOM原生对象转化为jQuery对象的方法是用$()包裹,如:$('<div>abc</div>')

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

jQuery绑定事件的方法以及对应特点:

  • .bind()
    $('a').bind('click', function() { alert("That tickles!") });
    这是最简单的绑定方法了。JQuery扫描文档找出所有的$(‘a’)元素,并把alert函数绑定到每个元素的click事件上。

  • .live()
    $('a').live('click', function() { alert("That tickles!") });
    JQuery把alert函数绑定到$(document)元素上,并使用’click’和’a’作为参数。任何时候只要有事件冒泡到document节点上,它就查看该事件是否是一个click事件,以及该事件的目标元素与’a’这一CSS选择器是否匹配,如果都是的话,则执行函数。
    live方法还可以被绑定到具体的元素(或“context”)而不是document上,像这样:
    $('a', $('#container')[0]).live(...);

  • .delegate()
    $('#container').delegate('a', 'click', function() { alert("That tickles!") });
    JQuery扫描文档查找$(‘#container’),并使用click事件和’a’这一CSS选择器作为参数把alert函数绑定到$(‘#container’)上。任何时候只要有事件冒泡到$(‘#container’)上,它就查看该事件是否是click事件,以及该事件的目标元素是否与CCS选择器相匹配。如果两种检查的结果都为真的话,它就执行函数。
    $('a').live('click', function() { blah() });
    // 或者
    $(document).delegate('a', 'click', function() { blah() });
    以上两个例子可以达到相同的效果,.delegate和.live哪个更好用?答案是.delegate。为什么呢?看似两个的作用差不多,但是使用.live()首先要扫描整个的文档查找所有的$(‘a’)元素,把它们存成jQuery对象。而delegate方法仅需要查找并存储$(document)元素。所以后者速度更快
    其次,live方法有一个非常大的缺点,那就是它仅能针对直接的CSS选择器做操作,这使得它变得非常的不灵活。

  • .on()
    在jQuery 3.0中,.bind()已被标记为弃用。从jQuery 1.7开始,.live() 方法也已废弃,[.on()] 方法是将事件处理程序绑定到文档(document)的首选方法。 旧版本的jQuery中用户,应优先使用[.delegate()]来取代.live()。

    // Bind
    $( "#members li a" ).on( "click", function( e ) {} ); 
    $( "#members li a" ).bind( "click", function( e ) {} );
    // Delegate
    $( "#members" ).on( "click", "li a", function( e ) {} ); 
    //注意子元素参数位置
    $( "#members" ).delegate( "li a", "click", function( e ) {} );
    

on事件绑定把上面三种方法统一了,用起来更方便。
on方法可以在同一个元素上绑定多个事件
$( "#cart" ).on( "mouseenter mouseleave", function( event ) {
$( this ).toggleClass( "active" );
});
.toggleClass()方法用于为匹配的元素集合中的每个元素上添加或删除一个或多个样式类(class),取决于这个样式类(class)是否存在或state参数的值。(如果存在(不存在)就删除(添加)一个类。)
.on()绑定事件和事件代理
$( "#dataTable tbody tr" ).on( "click", function() {
console.log( $( this ).text() );
});
以上代码如果表格tbody中有多个tr,这需要给每个tr都绑定这样的事件处理程序。由于点击每一个tr时事件都会冒泡到它的父元素上,所以采用事件代理可以避免频繁的绑定和解绑事件。代码如下:
$( "#dataTable tbody" ).on( "click", "tr", function() {
console.log( $( this ).text() );
});

5. jquery 如何展示/隐藏元素?

  • .show()用于显示元素
    $('.target').show();
    采用这种方式,元素将立即被显示,没有动画。可以为其添加参数,显示时间或快慢。参考http://www.css88.com/jqapi-1.9/show/
  • .hide()用于隐藏元素

6. jquery 动画如何使用?

.animate()为元素添加动画。

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

  • .html()用于获取和设置元素内部的HTML内容,在.html()里添加字符串则为该元素设置HTML内容。如:
    <p class="p1">段落</p>
  • .text()用于获取和设置元素文本。
text.jpg

text2.jpg

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

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

推荐阅读更多精彩内容

  • 问答部分 一、说说库和框架的区别? 库~是一个提供了封装好很多方法的工具,在这个工具里面,用与不用都是由你决定,控...
    dengpan阅读 345评论 1 2
  • 问答 说说库和框架的区别? 库为 Library ( 简写 Lib ),框架为 Framework。 库是将代码集...
    coolheadedY阅读 216评论 0 1
  • 1.说说库和框架的区别? 库:用来提供一些方法的集合,避免重复定义相同功能的函数并具有一定的模式兼容性, 框架,规...
    candy252324阅读 296评论 0 0
  • 1.说说库和框架的区别? 库主要是封装了某些函数的集合。框架也是。使用库是指,你的代码决定什么时候从库中调用一个特...
    墨月千楼阅读 411评论 0 2
  • 问答: 1.说说库和框架的区别? 库就是一些已经封装好了的函数,这些函数可以实现特定的效果,只需要在使用的时候用少...
    饥人谷_任磊阅读 254评论 0 1