1.选择器 1.1基本选择器 1 2 3 4 $("#myELement" ) $("div" ) $(".myClass" ) $("*" )
1.2层叠选择器 1 2 3 4 $("form input" ) $("#main > *" ) $("label + input" ) $("#prev ~ div" )
1.3基本过滤选择器 1 2 3 4 5 6 7 8 9 10 $("tr:first" ) $("tr:last" ) $("input:not(:checked) + spa //过滤掉:checked的选择器的所有的input元素 $(" tr:even") //选择所有的tr元素的第0,2,4... ...个元素(注意:因为所选择的多个元素时为数组,所以序号是从0开始) $(" tr:odd") //选择所有的tr元素的第1,3,5... ...个元素 $(" td:eq(2 )") //选择所有的td元素中序号为2的那个td元素 $(" td:gt(4 )") //选择td元素中序号大于4的所有td元素 $(" td:lt(4 )") //选择td元素中序号小于4的所有的td元素 $(" :header") //选择h1、h2、h3之类的 $(" div:animated") //选择正在执行动画效果的元素
1.4内容过滤选择器 1 2 3 4 5 6 7 8 9 $("div:contains('John')" ) $("td:empty" ) $("div:has(p)" ) $("td:parent" ) `` ` ## 1.5可视化过滤选择器 ` `` js$("div:hidden" ) $("div:visible" )
1.6属性过滤选择器 1 2 3 4 5 6 7 $("div[id]" ) $("input[name='newsletter']" ) $("input[name!='newsletter']" ) $("input[name^='news']" ) $("input[name$='news']" ) $("input[name*='man']" ) $("input[id][name$='man']" )
1.7子元素过滤选择器 1 2 3 4 $("ul li:nth-child(2)" ),$("ul li:nth-child(odd)" ),$("ul li:nth-child(3n + 1)" ) $("div span:first-child" ) $("div span:last-child" ) $("div button:only-child" )
1.8表单元素选择器 1 2 3 4 5 6 7 8 9 10 11 $(":input" ) $(":text" ) $(":password" ) $(":radio" ) $(":checkbox" ) $(":submit" ) $(":image" ) $(":reset" ) $(":button" ) $(":file" ) $(":hidden" )
1.9表单元素过滤选择器 1 2 3 4 $(":enabled" ) $(":disabled" ) $(":checked" ) $("select option:selected" )
1.10应用实例 1.通过jquery的$()引用元素包括通过id、class、元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用dom定义的方法。 2.只有jquery对象才能使用jquery定义的方法。注意dom对象和jquery对象是有区别的,调用方法时要注意操作的是dom对象还是jquery对象。 3.jQuery对象和DOM对象互换 (1)普通的dom对象可以通过$()转换成jquery对象。1 $(document .getElementById("msg" ))
(2)如果jquery对象要转换为dom对象则必须取出其中的某一项,一般可通过索引取出。1 2 3 4 $("#msg" )[0 ] $("div" ).eq(1 )[0 ] $("div" ).get()[1 ] $("td" )[5 ]
(3)eq()和get()的区别 eq返回的是jquery对象,而 get(n)和索引返回的是dom元素对象。对于jquery对象只能使用jquery的方法,而dom对象只能使用dom的方法。
2.DOM遍历 2.1筛选元素 1 2 3 4 5 6 7 8 .filter(selector) .filter(callback) .eq(index) .first() .last() .slice(start[,end]) .not(selector) .has(selector)
2.2后代元素 1 2 3 .find(selector) .contents() .children([selector])
2.3同辈元素 1 2 3 4 5 6 7 .next([selector]) .nextAll([selector]) .nextUntil([selector],[filter]) .prev([selector]) .prevAll([selector]) .prevUntil([selector],[filter]) .siblings([selector])
2.4祖先元素 1 2 3 4 5 .parent([selector]) .parents([selector]) .parentsUntil([selector],[filter]) .closest(selector) .offsetParent()
2.5集合操作 1 2 3 4 5 .add([selector]) .addBack() .end() .map(callback) .pushStack()
2.6操作选中的元素 1 2 3 4 5 6 7 8 9 .is(selector) .index() .index(element) $.contains(a,b) .each(callback) .length .get() .get(index) .toArray()
2.7应用实例 1.jquery集合遍历1 2 3 4 5 $("p" ).each(function (i ) {this .style.color=["#f00" ,"#0f0" ,"#00f" ][ i ]}) $("tr" ).each(function (i ) {this .style.backgroundColor=["#ccc" ,"#fff" ][i%2 ]})
3.事件绑定 3.1基本事件 1 2 3 4 5 6 7 8 9 10 .ready(handler) .on(type,[selector],[data],handler) .on(events,[selector],[data]) .off(type,[selector],handler) .bind(type,[data],handler) .one(type,[data],handler) .unbind([type],[handler]) .delegate(selector,type,[data],handler) .delegate(selector,handlers) .undelegate(selector,type,[handler])
3.2其它方法 1 2 3 .trigger(type,[data]) .triggerHandler(type,[data]) $.proxy(fn,context)
3.3应用实例 1.遍历事件1 2 $("p").click(function(i){this.style.color=['#f00','#0f0′,'#00f'][ i ]})
2.模仿悬停事件 hover(fn1,fn2):一个模仿悬停事件的方法。当鼠标移动到一个匹配的元素上面时,会触发指定的第一个函数。当鼠标移出这个元素时,会触发指定的第二个函数。 3.删除绑定事件1 2 3 4 5 6 $("p" ).unbind(); $("p" ).unbind("click" ) `` ` 4..trigger(eventtype): 在每一个匹配的元素上触发某类事件 ` `` js$("p" ).trigger("click" );
4.DOM完全操作 4.1样式和属性 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 .attr(key) .attr(key,value) .attr(key,fn) .attr(obj) .removeAttr(key) .prop(key) .prop(key,value) .prop(key,fn) .prop(obj) .removeProp(key) .addClass(class ) //为匹配元素添加传入的类 .removeClass (class ) //为匹配元素删除传入的类 .toggleClass (class ) //对于匹配元素,如果存在类则删除,不存在则添加 .hasClass (class ) //匹配元素中至少一个包含传入的类则返回true .val () //获取第一个匹配元素的value 属性值 .val (value ) //设置每个匹配元素的value 属性
4.2内容操作 1 2 3 4 .html() .html(value) .text() .text(value)
4.3CSS和尺寸相关 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 .css(key) .css(key,value) .css(obj) offset() .position() .scrollTop() .scrollTop(value) .scrollLeft() .scrollLeft(value) .height() .height(value) .width() .width(value) .innerHeight() .innerWidth() .outerHeight([includeMargin]) .outerWidth([includeMargin])
4.4DOM插入 1 2 3 4 5 6 7 8 9 10 11 12 .append(content) .appendTo(selector) .prepend(content) .prependTo(selector) .after(content) .insertAfter(selector) .before(content) .insertBefore(selector) .wrap(content) .wrapAll(content) .wrapInner(content) .unwrap()
4.5替换、删除和复制 1 2 3 4 5 6 .replaceWith(content) .replaceAll(selector) .empty() .remove([selector]) .detach([selector]) .clone([withHandlers],[deepWithHandlers])
4.6数据 1 2 3 .data(key) .data(key,value) .removeData(key)
5.动画 5.1基础动画 1 2 3 4 5 6 7 8 9 10 11 12 .show() .show(speed,[callback]) .hide() .hide(speed,[callback]) .toggle([speed],[callback]) .slideDown([speed],[callback]) .slideUp([speed],[callback]) .slideToggle([speed],[callback]) .fadeIn([speed],[callback]) .fadeOut([speed],[callback]) .fadeToggle([speed],[callback]) .fadeTo(speed,opacity,[callback])
5.2自定义动画 1 2 .animate(attrs,[speed],[easing],[callback]) .animate(attrs,options)
5.3应用实例 1.切换隐藏显示元素1 2 3 4 5 6 7 8 $( "#foo" ).toggle( display ); if ( display === true ) { $( "#foo" ).show(); } else if ( display === false ) { $( "#foo" ).hide(); }
6.队列操作 1 2 3 4 5 6 7 8 9 .queue([queueName]) .queue([queueName],callback) .queue([queueName],newQueue) .dequeue([queueName]) .clearQueue([queueName]) .stop([clearQueue],[jumpToEnd]) .finish([queueName]) .delay(duration,[queueName]) .promise([queueName],[target])
7.Ajax方法 7.1发送请求 1 2 3 4 5 6 $.ajax([url],options) .load(url,[data],[callback]) $.get(url,[data],[callback],[returnType]) $.getJSON(url,[data],[callback]) $.getScript(url,[callback]) $.post(url,[data],[callback],[returnType])
7.2监视请求 1 2 3 4 5 6 .ajaxComplete(handler) .ajaxError(handler) .ajaxSend(handler) .ajaxStart(handler) .ajaxStop(handler) .ajaxSuccess(handler)
7.3配置 1 2 3 $.ajaxSetup(options) $.ajaxPrefilter([dataType],handler) $.ajaxTransport(transportFunction)
7.4实用方法 1 2 3 4 5 6 7 .serialize() .serializeArray() $.param(obj) $.globalEval(code) $.parseJSON(json) $.parseXML(xml) $.parseHTML(html)
7.5应用实例 1.jsonp使用1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 jQuery(document ).ready(function ( ) { $.ajax({ type: "get" , url: "http://flightQuery.com/jsonp/flightResult.aspx?code=CA1998" , dataType: "jsonp" , jsonp: "callback" , jsonpCallback:"jsonpCallback" , success: function (json ) { alert('json:' + json); }, error: function ( ) { alert('fail' ); } }); });
2.jsonp原理1 2 3 4 5 6 7 8 <script type="text/javascript" src="http://remoteserver.com/remote.js" > </script> <script type="text/ javascript"> var localFunction = function(data){ alert('我是本地函数,可以被跨域的remote.js文件调用,远程js带来的数据是:'+ data.result) }; </script>
8.延迟对象 8.1创建对象 1 2 $.Deferred([setupFunction]) $.when(deferreds)
8.2延迟对象的方法 1 2 3 4 5 6 7 .resolve([args]) .resolveWith(context,[args]) .reject([args]) .rejectWith(context,[args]) .notify([args]) .notifyWith(context,[args]) .promise([target])
8.3承诺对象的方法 1 2 3 4 5 6 7 8 9 .done(callback) .fail(callback) .always(callback) .then(doneCallbacks,failCallbacks) .progress(callback) .isRejected() .isResolved() .state() .pipe([doneFilter],[failFilter])
8.4应用实例 1.转化成deferred对象1 2 3 4 $.Deferred(wait) .done(function ( ) { alert(“哈哈,成功了!”); }) .fail(function ( ) { alert(“出错啦!”); }) .always( function ( ) { alert(“已执行!”);} );
2.为多个操作指定回调函数,并按顺序执行1 $.when($.ajax("test1.html" ), $.ajax("test2.html" ))
更多参考:http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html
9.其它方法 9.1JQuery对象的属性
9.2数组和对象 1 2 3 4 5 6 7 8 $.each(collection,callback) $.extend(target,obj1,obj2,….) $.grep(array,callback,[invert]) $.makeArray(obj) $.map(array,callback) $.inArray(value,array) $.merge(array1,array2) $.unique(array)
9.3对象判断 1 2 3 4 5 6 7 8 $.isArray(obj) $.isEmptyObject(obj) $.isFunction(obj) $.isPlainObject(obj) $.isNumber(obj) $.isWindow(obj) $.isXMLDoc(obj) $.type(obj)
9.4其他 1 2 3 4 5 $.trim(string) $.noConflict([removeAll]) $.noop() $.now() $.holdReay(hold)
9.5应用实例 1.扩展功能1 2 3 4 5 6 7 8 9 10 11 12 13 14 $.extend({ min:function (a, b ) {return a< b?a:b; }, max:function (a, b ) {return a> b?a:b; } }); console .log($.min(10 ,20 ));var settings= $.extend(obj1, obj2); var settings= $.extend(true , obj1, obj2);var settings= $.extend({}, obj1, obj2);
2.each迭代1 2 3 4 5 6 7 8 9 10 11 12 $.each( [0,1,2],function(i, n){ alert( “Item #”+ i+ “: ”+ n ); }); var tempArr=[0 ,1 ,2 ];for (var i=0 ;i<tempArr.length;i++){ alert(”Item #”+i+”: “+tempArr[ i ]); } $.each( { name : “John”, lang : “JS” },function (i, n ) { alert( “Name: ”+ i+ “, Value : ” + n ); }); Name:name, Value :John Name:lang, Value :JS
3.map(array, fn):数组映射。把一个数组中的项目(处理转换后)保存到到另一个新数组中,并返回生成的新数组。1 2 3 4 var tempArr=$.map( [0 ,1 ,2 ],function (i ) {return i+ 4 ; });var tempArr=$.map( [0 ,1 ,2 ],function (i ) {return i> 0 ? i+ 1 :null ; });
4.$.merge(arr1,arr2):合并两个数组并删除其中重复的项目。1 $.merge( [0 ,1 ,2 ], [2 ,3 ,4 ] )
5.$.trim(str):删除字符串两端的空白字符。1 $.trim(” hello, how are you? “);
6.解决自定义方法或其他类库与jQuery的冲突
10.项目总结 10.1 避免cdn取不到文件 1 2 3 4 5 6 <script type="text/javascript" > <script type="text/javascript" language="Javascript" src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.4.1.min.js " ></script > <script type='text/javascript' > </script> </ script>
10.2 设置随机数,避免缓存 1 data: $content+ new Date (),
这里加 new Date()的作用是,设置随机数,避免缓存,重新加载
10.3 停止往下运行
10.4 this调用
jquery的this是$(this)
10.5 先获取一个id再获取一个class要比直接获取class快 1 $("#id .item" ) 比 $(".item" ) 快
10.6 获取DOM的索引值i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 for (var i=0 ;i<getSlide.length;i++) { getSlide[i].index=i; getSlide[i].onmousewheel=function ( ) { alert("haha" ); console .log(this .index); } } for (var i=0 ;i<getSlide.length;i++){ $(".slide" ).eq(i).attr("index" ,i); $(".slide" ).eq(i).on("mousewheel" ,function ( ) { console .log($(this ).attr("index" )); }); } $(".slide" ).each(function (i ) { $(this ).attr("index" ,i).on("click" ,function ( ) { console .log($(this ).attr("index" )); }) }) $('.slide' ).each(function (i ) { $(this ).data('index' ,i); }).on('click' , function ( ) { console .log($(this ).data('index' )); })
10.7 深拷贝合并继承 1 $.extend( true ,target, object1, object2 );
target是目标对象–接收新属性 1.如果只有一个target,就会将jquery视为目标对象,这个target就是jquery扩展的新功能 2.如果除了目标对象还有至少一个对象,那么就会将剩下所有的对象合并到目标对象target内.注:这种的是浅拷贝,相同属性的话,后边的属性会覆盖掉前边的属性 3.保留target,合并到新对象上,可以通过空对象来实现1 var object = $.extend({}, object1, object2);
4.加上参数true的话,就是深拷贝(递归合并)—同样也是复制到target对象内注:这种合并的话,如果相同方法内有相同的属性,后边的属性会覆盖掉前边的属性
10.8 回到顶部 1 2 3 4 $('.top' ).click(function (e ) { e.preventDefault(); $('html, body' ).animate({scrollTop : 0 }, 800 ); });
10.9 图片预加载 1 2 3 4 for (var i = 0 ; i < arguments .length; i++) {$('<img>' ).attr('src' , arguments [i]); } $.preloadImages('img/hover-on.png' , 'img/hover-off.png' );
10.10 检查图片是否加载完毕 1 2 3 $('img' ).load(function ( ) { console .log('图片全部加载完成' ) })
10.11 自动修复损坏的图片 1 2 3 $('img' ).on('error' , function ( ) { $(this ).prop('src' , 'img/broken.png' ); });
1 2 3 4 5 $('input[type="submit"]' ).prop('disabled' , true ); $('input[type="submit"]' ).prop('disabled' , false ); $('input[type="submit"]' ).removeAttr('disabled' );
10.13 停止链接跳转–就是阻止默认事件 1 2 3 $('a.no-link' ).click(function (e ) { e.preventDefault(); });
10.14 所有列相同高度 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 var $rows = $('.same-height-columns' );$rows.each(function ( ) { $(this ).find('.column' ).height($(this ).height()); }); $(document ).ready(function ( ) { function equalHeight (group ) { tallest = 0 ; group.each(function ( ) { thisHeight = $(this ).height(); if (thisHeight > tallest) { tallest = thisHeight; } }); group.height(tallest); } $(document ).ready(function ( ) { equalHeight($(".left" )); equalHeight($(".right" )); }); });
10.15 新标签页打开链接 1 2 3 $('a[href^="http"]' ).attr('target' , '_blank' ); $('a[href^="//"]' ).attr('target' , '_blank' ); $('a[href^="' + window .location.origin + '"]' ).attr('target' , '_self' );
10.16 通过文本内容找到元素 1 2 var search = $('#search' ).val();$('div:not(:contains("' + search + '"))' ).hide();
10.17 焦点在标签页上切换触发事件,H5新API 1 2 3 4 5 6 7 $(document ).on('visibilitychange' , function (e ) { if (e.target.visibilityState === "visible" ) { console .log('Tab is now in view!' ); } else if (e.target.visibilityState === "hidden" ) { console .log('Tab is now hidden!' ); } });
10.18 Delegate()函数有什么作用? 1 2 3 4 5 $("ul" ).delegate("li" , "click" , function ( ) { $(this ).hide(); });
10.19 怎样用jQuery编码和解码URL? encodeURIComponent(url) and decodeURIComponent(url)
10.20 禁止右键点击 1 2 3 4 5 $(document ).ready(function ( ) { $(document ).bind("contextmenu" ,function (e ) { return false ; }); });
10.21 移除单词 1 2 3 4 $(document ).ready(function ( ) { var el = $('#id' ); el.html(el.html().replace(/word/ig , "" )); });
10.22 验证是否在jquery对象集合中 1 2 3 4 5 $(document ).ready(function ( ) { if ($('#id' ).length) { } });
10.23 克隆对象 1 2 3 4 5 6 $(document ).ready(function ( ) { var cloned = $('#id' ).clone(); <DIV id=id></DIV > });
10.24 统计元素个数 1 2 3 $(document ).ready(function ( ) { $("p" ).size(); });
10.25 禁用jquery(动画)效果 1 2 3 $(document ).ready(function ( ) { jQuery.fx.off = true ; });
10.26 jquery框架 1 2 3 4 5 (function (window, undefined ) { var jQuery = function ( ) {} window .jQuery = window .$ = jQuery; })(window );
10.27 遇到外部链接自动添加target=”blank”的属性 1 2 3 4 var root = location.protocol + '//' + location.host;$('a' ).not(':contains(root)' ).click(function ( ) { this .target = "_blank" ; });
10.28 在文本或密码输入时禁止空格键 1 2 3 4 5 $('input.nospace' ).keydown(function (e ) { if (e.keyCode == 32 ) { return false ; } });
10.29 jquery自定义框架 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 $.fn.roundabout = function ( ) { var option = (typeof arguments [0 ] != 'object' ) ? {} : argument[0 ]; option = { title: '1' , } this .each(function (i ) { haha() }) } $.fn.extend({ roundabout: function ( ) {} }) $(document ).ready(){ $("#id" ).roundabout({ title:'hehe' }) }
10.30 选中切换 1 2 3 4 5 6 7 $("#CheckedAll" ).click(function ( ) { if ($(this ).is(":checked" )) { $("[name=items]:checkbox" ).prop("checked" , true ); } else { $("[name=items]:checkbox" ).prop("checked" , false ); } });
10.31 is()和hasClass()区别 没有区别-返回的是布尔值
10.32 find()和has()区别 find()是找到并选中括号内的元素 has()是选中包含 括号内元素的元素