锋利的jQuery-读书笔记

Javascript缺点:1.复杂的文档对象模型 2.不一致的浏览器实现 3.缺乏便捷的开发、调试工具。

jquery优点:1.轻量级 2.强大的选择器 3.出色的DOM操作 4.可靠的事件处理机制 5.完善的ajax\

jquery 代码风格

对于同一对象不超过三个操作,可以写成一行。

对于同一个对象的较多操作建议每行写一个操作。

对于多个对象的少量操作,可以每个对象写成一行,如果涉及子元素可以考虑适当地缩进。

jquery对象与DOM对象

如果获取的是jquery对象,前面加上$以示区分。

jquery对象转换成DOM 对象可以用[index]、get(index)

DOM 对象,只要用$()包装就可以变成jquery对象,如$(document.getElementById(’school’)

jquery与其他库的冲突

先导入其他库后导入jQuery库时:

jQuery.noConflict() //将$控制权让渡给其他

Jquery(function($){…})//在jQuery 内部使用$ 或匿名函数(function($){})(jQuery)

先导入jQuery库,后导入其他库时:

可以直接使用jQuery 做jQuery的处理,$用来操作其他库

jquery选择器

基本选择器#id,.class, element, *,( slector1, selector2,…)

层次选择器

后代$(‘ancestor descentdant’)、子元素$(‘parent> child’)

紧跟后的同辈元素$(‘prev + next’),等同于next()方法、其后所有同辈元素$(‘prev~siblings’),等同于nextAll(); siblings()方法与前后位置无关。

过滤选择器

基本过滤选择器。:first、:last、:not(selector)、:even(偶数)、:odd(奇数)、:eq(index)(索引)、:gt(index)(索引大于)、:lt(index)(索引小于)、:header(选取所有标题元素hn)、:animated(选取当前正在执行动画的所有元素)、:focus(选取获取焦点的元素。

内容过滤选择器。:contains(text)(文本中含有text)、:empty()选取不包含子元素(包括文本元素)、:has(selector)(含有选择器所匹配的元/素的元素、:parent选取含有子元素或文本的元素。

可见性过滤选择器。:hidden选取所有不可见的元素(包括display:none、文本域type=hidden、visibility:hidden之类的元素)、:visible选取所有可见的元素。

属性过滤选择器。[attribute]拥有此属性的元素、[attribute=value]、[attribute!=value]属性值不等于、[attribute^=value]属性值开头、[attribute$=value]属性值结尾、[attribute*=value]含有、[attribute|=value]属性值为value或以value-开头、[attribute~=value]属性值中含有value用空格分开的的属性的元素

子元素过滤选择器。:nth-child(index/even/odd/equation)、:first-child、:last-child、:only-child(某个元素是其父元素的唯一子元素则匹配)

表单对象属性过滤选择器。可用元素:enabled、不可用元素:disabled、单选框复选框:checked、下拉列表被选中:selected

表单选择器。:input、:text、:password(密码框)、:radio(单选框)、:checkbox(多选框)、:submit(提交框)、:image图像按钮、:reset重置按钮、:button按钮、:file上传域、:hidden 不可见元素

实例

filter( selector )方法,在集合元素中筛选, 区别于find(),在子元素中查找

css(name, value)。

is(“:visible")是显示。

toggle(fn1,fn2)方法,交替一组动作,fn1中是关于显示元素的,fn2中是关于隐藏元素的。

DOM操作

查找节点,元素节点(选择器)、文本节点text()方法;查找属性节点attr(’title’)

创建节点,var $li = $(‘’), $(‘ul’).append($li)

插入节点。在A中插入B, A.append(B)方法,向元素内部后置、prepend()向元素内部前置内容、after()在每个匹配内容之后插入、before()在每个匹配元素之前插入。在B中插入A,appendTo()、prependTo()、insertAfter()、insertBefore()

删除节点。remove()方法移除元素及后代节点,被移除元素之后还可以继续操作,但是绑定的事件已失效,可以向方法中传递选择器来选择匹配被移除对象。detach()方法移除后,被移除对象继续保留绑定的事件,重新添加后恢复到之前。empty(),只是清空该元素的所有后代节点,并非删除。

复制节点。clone(),若传递参数true,则表示复制节点及其绑定的事件。

替换节点。replaceWith(),将匹配的节点都置换成新节点,被替换元素之前的绑定事件都消失了。replaceAll(),可将替换内容前置。

包裹节点。wrap(),将每个匹配元素用新元素包裹,wrapAll(),将所有匹配元素,用一个新元素包裹,wrapInner(),将每个匹配元素的子内容用一个元素包裹。

属性操作。设置元素的单个属性,attr(name, value), 设置多个属性,attr({nam1:value, name2:value})。删除属性,removeAttr(name), 获取属性attr(name)

样式操作。追加样式,addClass(),移除样式removeClass(),交替一组动作,toggle(f1, f2), 第一个是显示对应的动作,第二个是隐藏对应的动作。toggleClass(),如果含有某个class则删除,如果不含有则添加。hasClass(),判断是否有某个样式。

设置和获取HTML、文本和值。html(value),设置html内容,html()获取内容,text(vaue)设置文本,text()获取文本。val(value),设置元素的值,val()获取元素的值,无论是单选,多选,还是文本框,或下拉列表,若为多选,则返回还有所有值的一个数组。this.defaultValue设置的初始值。val([value1, value2, value3])

遍历节点。children()只考虑子元素而不考虑后代元素,next(),匹配后面紧跟的同辈元素,prev()前面紧跟的同辈元素,siblings()取得匹配元素所有同辈元素, closest(selector),取得匹配的最近祖先元素元素。parent()集合中每个匹配的父元素,parents()获取集合中每个匹配的祖先元素。

css-DOM。css(name, value)设置的单个样式,设置多个样式css({name1:value, name2:value}), 获取设置值css(name)。 height()获取高度,设置高度height(100)), 获取宽度width()、设置宽度width(100);默认单位是px,也可设置为width(‘100em’)

offset()获取元素相对视窗的偏移,offset().left 获取左偏移,offset().top获取上偏移;position(),获取元素相对于最近一个已定位的父元素的偏移,position().left获取左偏移,position().top获取上偏移。

scrollTop(),获取滚动条到顶端的距离,scrollLeft(),获取滚动条到左端的距离,可以输入参数,表示滚动到某个地方。scrollTop(200)

jQuery中的事件和动画

事件绑定。bind(type[,data], fn),可以多次调用。可以绑定自定义事件。bind(‘myClick’, fn);

简写绑定事件。click, mouseover, mouseout这类常用事件可采用简写形式。.click(),.mouseover(),.mouseout()

合成事件。hover(enter, leave),鼠标放上去会触发第一个函数,鼠标离开会触发第二个元素,等同于绑定了mouseover()、mouseout()。toggle(f1, f2, f3,…),模拟鼠标连续单击事件,第一次触发第一个函数,第二次触发第二个函数。toggle还有另外一个作用,切换元素的可见状态。

阻止冒泡,event.stopPropagation(),阻止默认行为(如链接跳转,表单提交),event.preventDefault(), 如果同时阻止冒泡和默认行为,可以 return false。jquery不支持事件捕获。

事件对象属性。e.target 触发的元素、e.relatedTarget 所有发生事件的相关元素、event.pageX、event.pageY光标相对于页面的坐标。e.which 获取鼠标的按键,左中右,或键盘事件的按键。event.metaKey 获取ctrl键。

移除事件。unbind([type], [data]),若不包含参数,则删除该元素的所有事件。bind(‘click’, one=function(){}), unbind(‘click’, one)添加函数变量,来指定删除函数。

one(type, [data], fn)绑定事件,仅当第一次触发时执行,多次触发不执行。如绑定了点击事件,仅在第一次点击时执行。

模拟操作。trigger(type),trigger(‘focus’)、triggerHandler(‘focus')(只触发事件,不执行浏览器默认行为)。

绑定多个事件。bind(‘mouseover, mouseout’) 。添加事件命名空间,bind(‘mouseover.plugin’), trigger(‘click!’)触发不包含命名空间的点击事件。

jquery做动画要求在标准环境下,需在文件头部包含DTD定义。否则可能会出现动画抖动。

show()、hide()、slideUp()、slideDown()改变高度直至完全消失、fadeIn()、fadeOut()改变透明度直至完全消失。可以添加参数。

自定义动画 animate(params, speed, callback), params即是 {property1: “value1”, property2: “value2”},累加累减动画animate({left: “+=500px”}, 300)

停止动画和判断是否处于动画状态。stop([clearQueue],[gottoEnd]),第一个参数代表是否要清空未执行完的动画,第二个参数代表是否直接将正在执行的动画跳转到末的状态。stop(),会结束当前正在执行的动画,并立即进入下一个动画。is(‘:animated’) 判断元素是是否处于动画。delay(1000)延迟动画。

其他动画方法。toggle(speed, [callback])、slideToggle(speed, [easing], [callback])、fadeTo(speed, opacity, [callback])、fadeToggle(speed, [easing], [callback])

jQuery对表单表格的操作及更多应用

单行文本框应用,失去焦点blur()、获得焦点focus(),可以结合:focus选择器

多行文本框应用,高度变化,animate({ height: “+=50"}, 400),滚动条高度变化,animate({ scrollTop: “+=50” }, 400)

复选框应用,attr(‘checked’, true)设置选中,attr(’checked’)获取设置的属性值。反选操作attr(‘checked’, !$(this).attr(‘check’)),采用javascript的DOM操作会更加简洁,this.check = !this.checked.    each(fn)方法遍历jquery元素。通过全选/全不选按钮,来控制数组,对全选和全不选按钮绑定点击事件,并将被控制数组的checked值设置地和全选/全不选按钮一样即可。$(‘[name=items]:checkbox’).each(function(){if(!this.checked){flag= false}}),循环遍历数组,当出现没有选中选项时,将flag设置为false.过滤被选中元素,若长度等于list则为全选,attr(‘checked’, $tmp.length ==$tmp.filter(‘:checked’).length)

prop获取属性和设置属性值,当属性只有名没有值的时候,或属性值为true,false时,应该用prop,代替attr。prop获取的值只会返回true或false。

下拉框的应用。结合选择符,:selected。var hasSelected = $(this).hasClass(‘selected’)   $(this)[hasSelected ? “removeClass“: “addClass”](‘selected’)三元运算符在选择方法中的应用。

slice(-2),从指定位置截取大结尾,parseInt(),转换为整数,网页换肤,attr(‘href’, “css/“ + this.id + “.css”)

Ajax的应用

Ajax优点,不刷新整个页面,数据按需发送,把一部分服务器负担转移到客户端,减轻了服务器和带宽负担。

Ajax缺点,破坏浏览器的前进和后退行为,对搜索引擎支持不足。

load(url , data, callback),url请求html的页面地址,data发送给服务器的名值对参数,callback无论请求成功失败的回调函数。当load方式带有参数时会使用post方式发送请求。

$.get/post( url, data, callback, type), type为服务器端返回内容的格式。

get与post方法区别。get请求会将参数在url后进行转换,post请求,则是作为消息的实体内容。get方式对传输数据有大小限制(<2kb), 而post理论上不受限制。get方式的请求会被浏览器缓存起来,post方式相对安全。

$.getScript(‘app.js’[, callback]),加载指定文件。

$.getJSON(url, callback)

$.each(data, function(i, item){})函数不同于jquery对象的each方法,接收一个数组或对象为第一个参数,回调函数作第二参数,包含两个参数,第一个为对象的成员或数组的索引,第二个为对应变量或内容。

$.ajax(options), url, type, timeout, data, dataType, beforeSend, complete, success, error。

序列化元素,serialize()方法,将DOM元素内容序列化为字符串,便于ajax请求,$(‘#form’).serialize()。serializeArray() 将DOM元素序列化后,返回JSON字符串。$.param(obj), 对数组或对象进行序列化为字符串。

ajax全局事件,$(‘#loading’).ajaxStart(function(){$(this).show()}).ajaxStop(function(){$(this).hide()})

jquery新增

$(elements).on( events [, selector], [,data], handler) 绑定事件,取代之前的bind, delegate, live, 可用于动态元素,$(elements).off( events [, selector], [,data], handler) 解除绑定事件。

closest()从元素本身逐级向上找,返回最先匹配的祖先元素,$.fx.off()关闭所有动画,$.isArray()确定参数是否是数组。

$.proxy(function(){//this}, this)保留特定的上下文

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

推荐阅读更多精彩内容