title: jQuery
date: 2019-08-22 13:14:59
tags: javascript
categories: # 这里写的分类会自动汇集到 categories 页面上,分类可以多级
选择器
jQuery 基本选择器
解释
$(‘*‘)
匹配所有元素
$(‘#id’)
id 选择器
$(‘.class’)
类选择器
$(‘element’)
标签选择器
组合选择器
解释
$(‘E,F’)
多元素选择器,同时匹配 E 和 F
$(‘E F’)
后代选择器,用空格分隔,匹配 E 元素所有后代
$(‘E>F’)
子元素选择器,匹配 E 元素所有直接子元素
$(‘E+F’)
直接相邻元素,匹配 E 元素之后的相邻的同级元素 F
$(‘E~F’)
普通相邻元素(弟弟选择器),匹配 E 元素之后的同级元素 F(无论是否直接相邻)
$(‘class1.class2’)
匹配类名中既含有 class1 又含有 class2 的元素
基本过滤选择器
解释
$(‘E:first’)
所有 E 中的第一个
$(‘E:last’)
所有 E 中的最后一个
$(‘E:not(selector)’)
按照 selector 过滤 E
$(‘E:even’)
所有 E 中 index 是偶数
$(‘E:odd’)
所有 E 中 index 是奇数
$(‘E:eq(n)’)
所有 E 中 index 为 n 的元素
$(‘E:gt(n)’)
所有 E 中 index 大于 n 的元素
$(‘E:lt(n)’)
所有 E 中 index 小于 n 的元素
$(‘header’)
选择 h1~h6 元素
$(‘div:animated’)
选择正在执行动画效果的元素
内容过滤器
解释
$(‘E:contains(value)’)
内容包含 value 的元素
$(‘E:empty’)
内容为空的元素
$(‘E:has(F)’)
子元素中有 F 的元素,$(‘div:has(a)’):包含 a 标签的 div
$(‘E:parent’)
父元素是 E 的元素
可视化选择器
解释
$(‘E:hidden’)
所有被隐藏的 E
$(‘E:visible’)
所有可见的 E
属性过滤选择器
解释
$(‘E[attr]’)
含有属性 attr 的 E
$(‘E[attr=value]’)
属性 attr=value 的 E
$(‘E[attr !=value]’)
属性 attr!=value 的 E
$(‘E[attr ^=value]’)
属性 attr 以 value 开头的 E
$(‘E[attr $=value]’)
属性 attr 以 value 结尾的 E
$(‘E[attr *=value]’)
属性 attr 包含 value 的 E
$(‘E[attr][attr*value]’)
可以连用
子元素过滤器
解释
$(‘E:nth-child(n)’)
E 的第 n 个子节点
$(‘E:nth-child(3n+1)’)
E 的第 3n+1 个子节点
$(‘E:nth-child(even)’)
E 的 index 为偶数的子节点
$(‘E:nth-child(odd)’)
E 的 index 为奇数的子节点
$(‘E:first-child’)
所有 E 的第一个子节点
$(‘E:last-child’)
所有 E 的最后一个子节点
$(‘E:only-child’)
只有唯一子节点的 E 的子节点
表单元素选择器
解释
$(‘E:type’)
特定类型的 input
$(‘:checked’)
被选中的 checkbox 或者 radio
$(‘option:selected’)
被选中的 option
其他查找相关元素的方法 .eq(index), .get([index]) $('div').eq(3) //获取所有div中第4个jQuery对象
$('div')[2] 或者 $('div').get(2) //获取第三个的DOM对象
get()
不写参数把所有对象转为 DOM 对象返回
兄弟元素获取
选择器
解释
.next([selector])
没有写 selcetor,返回所有后面的兄弟元素.写了就返回满足条件的
.prev([selector])
和上面相反,获取前面的兄弟元素
.nextAll([selector])
获取所有后面的兄弟元素
.prevAll([selector])
获取所有前面的兄弟元素
.siblings([selector])
获取所有前后邻居的元素
父子元素获取
选择器
解释
.parent([selector])
获取父元素,可选筛选器
.parents([selector])
获取祖先元素,可选筛选器
.children([selector])
获取子元素,可选筛选器
.find([selector])
查找符合选择器的后代
筛选当前结果集
选择器
解释
.first()
获取当前结果集第一个对象
.last()
获取当前结果集最后一个对象
.filter(slector), .filter(function(index))
筛选当前结果集符合条件的对象
.not(selector), .not(function(index))
从当前结果集中移除指定元素
.is(selector), is(function(index)), is(dom/jqObj)
判断结果集中的元素,是否为一个选择器,DOM 元素,或者 jQuery 对象,如果这些元素至少一个匹配给定的参数,那么返回 true
.has(seletor), has(dom)
筛选匹配结果集中符合条件的后代元素
jQueryDOM 操作 创建元素 将 DOM 传入$方法即可返回一个 jQuery 对象
var obj = $('<div class="test"><p><span>Done</span></p></div>')
添加元素
方法
解释
示例
.append(content[,content]) / .append(function(index,html))
可以添加多个内容,DOM 对象,字符串,jQuery 对象
; ; $(‘p’).append(document.createTextNode(‘hello’))
.appendTo(target)
把对象插入到目标 target 尾部,可以是 selector,DOM 对象,字符串,元素集合,jQuery 对象(最后一个孩子)
; $(‘Test
‘).appendTo(‘.inner’)
.prepend(content[,content]) / .prepend(function(index, html))
向头部追加内容,内容添加到最前面(第一个孩子)
$(‘.inner’).prepend(‘Test
‘)
.prependTo(Target)
把对象插入到目标头部
$(‘Test
‘).prependTo(‘.inner’)
.before([content][,content]) / .before(function)
在对象前面(不是头部,而是外面,和对象并列同级)插入内容(放到前面做邻居)
$(‘.inner’).before(‘Test
‘); ; $( “p” ).before( document.createTextNode( “Hello” ) )
.insertBefore(target)
把对象插入到 target 之前(不是头部,是同级)(做邻居)
.after([content][,content]) / .after(function(index))
和 before 相反,在对象后面(不是尾部,而是外面,和对象并列同级)插入内容,参数和 append 类似
$( “.inner” ).after( “Test
“ ); $( “p” ).after( document.createTextNode( “Hello” ) );
.insertAfter(target)
和 insertBefore 相反,把对象插入到 target 之后(同样不是尾部,是同级)
$( “Test
“ ).insertAfter( “.inner” ); $( “p” ).insertAfter( “#foo” );
删除元素
方法
解释
示例
.remove([selector])
删除被选元素及其子元素
$(‘.div’).remove()
.empty()
清空被选元素内所有子元素
$(‘body’).empty()
.detach()
.detach() 方法和.remove()一样, 除了 .detach()保存所有 jQuery 数据和被移走的元素相关联。当需要移走一个元素,不久又将该元素插入 DOM 时,这种方法很有用。
$(‘.div’).detach()
包裹元素
方法
解释
示例
.wrap(wrapElement) / .wrap(function(index))
为每个对象包裹一层 HTML 结构,可以是 selector, element, HTML string, jQuery object
$( “.inner” ).wrap( “
“ )
.wrapAll(wrappingElement)
把所有匹配对象包裹在同一个 html 结构里
$(‘.inner’).wrapAll(‘
)
.wrapInner(wrapingElement)
为每个匹配的对象包裹一层 HTML 结构
$(‘.inner’).wrapInner(‘
)
.unwrap
把 DOM 元素外的壳去掉
$(‘p’).unwrap()
html([string]) $('div').html()
$('div').html('123')
这是一个读写两用的方法,用于获取修改元素的 innerHTML
没有传递参数的时候,返回元素的 innerHTML
当传递一个 string 参数时,修改元素的 innerHTML 为参数值
text() 和 html 方法类似,操作的是 DOM 的 innerText 值
jQuery 属性操作 属性相关 .val([value]) 这是一个读写双用的方法,用来处理 input 的 value 值,当方法没有参数时返回 input 的 value 值.
当传递一个参数时,方法修改 input 的 value 值为参数值.
1 2 $(".input" ).val (); $(".input" ).val ("newValue" );
.attr() .attr(attributeName) 获取元素特定属性的值
var title = $('em').attr('title')
.attr(attributeName,value)/.attr(attributesJson)/.attr(attributeName,funtion(index,attr)) 为元素属性赋值
$( "#greatphoto" ).attr( "alt", "Beijing" )
.removeAttr() 为匹配的元素集合中的每个元素移除一个属性
$('div').removeAttr('id')
.prop()/.removeProp() 这两个方法是用来操作元素的 property 的
CSS 相关 .css() .css(propertyName) / .css(propertyNames) 获取元素 style 特定 property 的值
1 2 3 var color = $(this ).css ("background-color" );var styleProps = $(this ).css (["width" , "height" , "color" , "background-color" ]);
.css(propertyName,value)/.css(propertyName,function(index,value))/ .css(propertiesJson) 设置元素 style 特定 property 的值
1 2 3 4 5 6 7 8 9 10 11 12 $("div.example" ).css ("width" , function (index ) { return index * 50 ; }); $(this ).css ("width" , "+=200" ); $(this ).css ("background-color" , "yellow" ); $(this ).css ({ "background-color" : "yellow" , "font-weight" : "bolder" , });
.addClass(className) / .addClass(function(index,currentClass)) 为元素添加 class,不是覆盖原 class,是追加,也不会检查重复
1 2 3 4 5 $("p" ).addClass ("myClass yourClass" ); $("ul li" ).addClass (function (index ) { return "item-" + index; });
.removeClass([className])/.removeClass(function(index,class)) 移除元素单个/多个/所有 class
1 2 3 4 5 $("p" ).removeClass ("myClass yourClass" ); $("li:last" ).removeClass (function ( ) { return $(this ).prev ().attr ("class" ); });
.hasClass(className) 检查元素是否包含某个 class,返回 true/false
1 $("#mydiv" ).hasClass ("foo" );
.toggleClass(className) toggle 是切换的意思,方法用于切换,switch 是个 bool 类型值
1 2 3 4 5 6 7 8 9 <div class ="tumble" >Some text.</div> $( "div.tumble" ).toggleClass ( "bounce" ) <div class ="tumble bounce" >Some text.</div> $( "div.tumble" ).toggleClass ( "bounce" ) <div class ="tumble" >Some text.</div>
jQuery 常用方法 .each(fnction(index, Element)) 遍历一个 jQuery 对象,为每个匹配元素执行一个函数
1 2 3 4 5 $("li" ).each (function (index ) { console .log (index + ":" + $(this ).text ()); });
jQuery.each(collection, callback(indexInArray, valueOfElement)) 一个通用迭代函数,可以迭代对象和数组.数组和类数组对象通过长度属性来迭代数字索引,从 0 到 length-1.
其他对象通过其属性名进行迭代.
上面 jQuery 可以用 .each()`.
1 2 3 4 5 6 7 var obj = { "fla" : "infla" , "duh" : " no duh" } $.each (obj, function (key, value ){ console .log (key + ":" + value) }
.map(callback(index, domElement)) 通过一个函数匹配当前集合中的每个元素,返回一个包含新的 jQuery 对象
1 2 3 $(".div" ).map (function (i, ele ) { return this .id ; });
jQuery.extend([deep,]target[,ovject1][,objectN])
当提供两个或多个对象给$.extend(),对象的所有属性都添加到目标对象(target 参数).
如果只有一个参数提供给$.extend(),这意味着目标参数被省略,在这种情况下,jQuery 对象本身默认为目标对象.
这样我们可以在 jQuery 的命名空间下添加新功能.
var obj = $.extend({}, object1, object2)
object1,object2
会被添加到{}中
如果第一个对象的属性本身是一个数组或对象,那它将完全用第二个对象相同的 key 重写一个属性.
这些值不会被合并.如果 true 作为第一个参数,那么会在对象上进行递归的合并.
.clone([withDataAndEvents]) .clone()方法深度复制所有匹配的元素集合,包括所有匹配元素,匹配元素的下级,文字节点.
$('.hello').clone().appendTo('.Goodbye')
.index()/.index(selector)/.index(element) 从给定集合中查找特定元素 index
没参数返回第一个元素 index
如果参数是 DOM 对象或 jQuery 对象,则返回参数在集合中的 index
如果参数是选择器,返回第一个匹配元素的 index,没有找到返回-1
1 2 var listItem = $(".bar" );console .log ("Index:" + $("li" ).index (listItem));
.ready(handler) 当 DOM 加载完毕,执行.
下面两种等价
$(document).ready(handler)
$(handler)
jQuery 事件 .on(events[,selector][,data],handler(eventObject))
events: 一个或多个空格分隔的事件类型和可选空间
selector: 一个选择器字符串,用于过滤被选中的元素中能触发事件的后代元素.
如果选择器是 null 或者忽略,那么被选中的元素总能触发事件 3. data: 当一个事件被触发,要传递给事件处理函数的 event.data 4. handler(eventObject): 事件被触发时,执行的函数.
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 29 30 31 32 33 34 35 36 37 38 39 40 <div class ="box" > <ul > <li > 1</li > <li > 2</li > <li > 3</li > <li > 4</li > </ul > </div> <input id ="ipt" type ="text" > <button id ="btn" > 添加</button > <div id ="wrap" > </div > <script > $('.box li' ).on ('click' ,function ( ){ console .log (1 ) var str = $(this ).text () $('#wrap' ).text (str) }) $('.box>ul>li' ).click (function ( ){ console .log (2 ) var str = $(this ).text () $('#wrap' ).text (str) }) $('btn' ).on ('click' ,function ( ){ var value = $('#ipt' ).val () $('.box>li' ).append ('<li>' + value + '</li>' ) }) $('.box ul' ).on ('click' ,'li' ,function ( ){ var str = $(this ).text () $('#wrap' ).text (Str ) }) document .querySelector ('.box ul' ).addEventListener ('click' ,function (e ){ if (e.target .tagName .toLowerCase () === 'li' ){ } }) </script >
.one(events[,selector][,data],handler(eventObject)) 同 on,绑定事件,但只执行一次
.off(events[,selector][,handler]) 移除一个事件处理函数
$('.box li').off('click')
根据绑定到匹配元素的给定的事件类型执行所有的处理程序和行为
1 2 3 4 $("#foo" ).on ("click" , function ( ) { console .log ($(this ).text ()); }); $("#foo" ).trigger ("click" );
其他 事件 blur([[data],fn])
change([[data],fn])
click([[data],fn])
dblclick([[data],fn])
error([[data],fn])
focus([[data],fn])
focusin([data],fn)
focusout([data],fn)
keydown([[data],fn])
keypress([[data],fn])
keyup([[data],fn])
mousedown([[data],fn])
mouseenter([[data],fn])
mouseleave([[data],fn])
mousemove([[data],fn])
mouseout([[data],fn])
mouseover([[data],fn])
mouseup([[data],fn])
resize([[data],fn])
scroll([[data],fn])
select([[data],fn])
submit([[data],fn])
事件对象 eve.currentTarget
eve.data
eve.delegateTarget
eve.isDefaultPrevented()
eve.isImmediatePropag…()
eve.isPropagationStopped()
eve.namespace
eve.pageX
eve.pageY
eve.preventDefault()
eve.relatedTarget
eve.result
eve.stopImmediatePro…()
eve.stopPropagation()
eve.target
eve.timeStamp
eve.type
eve.which
jQuery 动画 基础 .hide([duration][,easting][,fn])
duration: 三种预定速度之一的字符串(“slow”,”normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)
easing: 用来指定切换效果,默认是”swing”,可用参数”linear”
fn: 在动画完成时执行的函数,每个元素执行一次。
用于隐藏元素,没有参数等同于直接设置 display 属性
1 2 3 $("#book" ).hide (300 , "linear" , function ( ) { console .log ("Animation complete." ); });
.show([duration][,easing][,fn]) 显示元素,用法类似 hide
.toggle([duration][,easing][,fn]) 事件处理套件也有一个名为.toggle()方法。哪一个被调用取决于传递的参数的设置
用来切换元素的隐藏、显示,类似于 toggleClass,用法和 show、hide 类似
渐变 .fadeIn( [duration ] [, easing ] [, complete ] ) 渐入效果
.fadeOut( [duration ] [, easing ] [, complete ] ) 渐出效果
.fadeTo( duration, opacity [, easing ] [, complete ] ) 调整匹配元素的透明度,方法通过匹配元素的不透明度做动画效果
1 2 3 $("#book" ).fadeTo ("slow" , 0.5 , function ( ) { });
fadeToggle([speed,[easing],[fn]]) 通过不透明度的变化来开关所有匹配元素的淡入和淡出效果,并在动画完成后可选地触发一个回调函数。
这个动画只调整元素的不透明度,也就是说所有匹配的元素的高度和宽度不会发生变化。
1 2 3 4 $("p" ).fadeToggle ("fast" , function ( ) { alert ("Animation Done." ); });
slideDown([speed],[easing],[fn]) 下拉动画.这个动画效果只调整元素的高度,可以使匹配的元素以“滑动”的方式显示出来。
slideUp([speed,[easing],[fn]]) 上浮动画,向上隐藏,在隐藏完成后可选地触发一个回调函数。
slideToggle([speed],[easing],[fn]) 上下切换
动画队列 因为动画是异步,所以将动画执行函数放入回调函数中,等动画执行完毕再执行其他的.
但是这样写会形成回调地狱.又因为存在动画队列,可以按代码二方法执行会有同样效果.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 $box.hide (1000 , function ( ) { $box.show (1000 , function ( ) { $box.fadeOut ("slow" , function ( ) { $box.fadeIn ("slow" , function ( ) { $box.slideUp (function ( ) { $box.slideDown (function ( ) { console .log ("动画执行完毕" ); }); }); }); }); }); }); $box .hide (1000 ) .show (1000 ) .fadeOut () .fadeIn () .slideUp () .slideDown (function ( ) { console .log ("真的完毕了" ); });
自定义动画 animate(params,[speed],[easing],[fn])
这个函数的关键在于指定动画形式及结果样式属性对象。
这个对象中每个属性都表示一个可以变化的样式属性(如“height”、“top”或“opacity”)。
注意:所有指定的属性必须用驼峰形式,比如用 marginLeft 代替 margin-left.
params:一组包含作为动画属性和终值的样式属性和及其值的集合
speed:三种预定速度之一的字符串(“slow”,”normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)
easing:要使用的擦除效果的名称(需要插件支持).默认 jQuery 提供”linear” 和 “swing”.
fn:在动画完成时执行的函数,每个元素执行一次。
.finish 停止当前动画,并清除动画队列中所有未完成的动画,最终展示动画队列最后一帧的最终状态
.stop( [clearQueue] [,jumpToEnd]) 停止当前正在运行的动画
AJAX jQuery.ajax(url,[settings]) jQuery 底层 AJAX 实现.$.ajax()
返回其创建的 XMLHttpRequest 对象。
大多数情况下你无需直接操作该函数,除非你需要操作不常用的选项,以获得更多的灵活性。
最简单的情况下,$.ajax()
可以不带任何参数直接使用。
注意,所有的选项都可以通过$.ajaxSetup()
函数来全局设置。
回调函数
如果要处理$.ajax()
得到的数据,则需要使用回调函数。beforeSend、error、dataFilter、success、complete。
beforeSend 在发送请求之前调用,并且传入一个 XMLHttpRequest 作为参数。
error 在请求出错时调用。传入 XMLHttpRequest 对象,描述错误类型的字符串以及一个异常对象(如果有的话)
dataFilter 在请求成功之后调用。传入返回的数据以及”dataType
“参数的值。
并且必须返回新的数据(可能是处理过的)传递给 success 回调函数。
success 当请求之后调用。传入返回后的数据,以及包含成功代码的字符串。
complete 当请求完成之后调用这个函数,无论成功或失败。传入 XMLHttpRequest 对象,以及一个包含成功或错误代码的字符串。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 $.ajax ({ url : 'test.com' , type : 'GET' , datatype : json, data : { name : 'tom' , age : '12' }, <!-- success : function (result ){ console .log (result) } --> }).done (function (result ){ console .log (result) }).fail (function (jqXHR, textStatus ){ consloe.log (textStatus) })
url: 一个用来包含发送请求的 URL 字符串。
settings: AJAX 请求设置。所有选项都是可选的。
seting 中的设置
async
:默认设置下,所有请求均为异步请求(也就是说这是默认设置为 true )。
如果需要发送同步请求,请将此选项设置为 false 2. beforeSend
:请求发送前的回调函数,用来修改请求发送前 jqXHR 对象,此功能用来设置自定义 HTTP 头信息
该 jqXHR 和设置对象作为参数传递 3. cache
:如果设置为 false ,浏览器将不缓存此页面。
注意: 设置 cache 为 false 将在 HEAD 和 GET 请求中正常工作。
它的工作原理是在 GET 请求参数中附加”_={timestamp}” 4. context
:这个对象用于设置 Ajax 相关回调函数的上下文。
默认情况下,这个上下文是一个 ajax 请求使用的参数设置对象 5. data
:发送到服务器的数据。将自动转换为请求字符串格式。
GET 请求中将附加在 URL 后面,POST 请求作为表单数据 6. headers
:一个额外的{键:值}对映射到请求一起发送。此设置会在 beforeSend 函数调用之前被设置;
因此,请求头中的设置值,会被 beforeSend 函数内的设置覆盖 7. type
: 请求方式 (“POST” 或 “GET”),默认为 “GET”。
注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持。
jQuery.get( [settings] ) / jQuery.post( [settings ] ) 这两个方法专门用来处理 get 和 post 请求
1 2 3 $.get ("test.html" , function (data ) { $(".result" ).html (data); });
jQuery.getJSON(url[,data][,success(data,textStatus,jqXHR)]) 使用一个 HTTP GET 请求从服务器加载 JSON 编码的数据
范例
1 2 3 4 5 6 7 8 9 10 11 12 $.getJSON ("ajax/test.json" , function (data ) { var items = []; $.each (data, function (key, val ) { items.push ('<li id="' + key + '">' + val + "</li>" ); }); $("<ul/>" , { class : "my-new-list" , html : items.join ("" ), }).appendTo ("body" ); });
.load(url[,data][,complete(responseText,textStatus,XMLHttpRequest)]) 从服务器载入数据并且将返回的 HTML 代码并插入至匹配的元素中
$('#result').load('ajax/test.html')
.serialize()
/ serializeArray()
将用作提交的表单元素的值编译成字符串,方法没有参数,使用标准的 URL-encoded 符号上建立一个文本字符串.
它可以对一个代表一组表单元素的 jQuery 对象进行操作,比如<input>, <textarea>, 和 <select>
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <form id="holder" > <input type ="text" name ="a" value ="1" /> <div > <input type ="text" name ="b" value ="2" id ="b" /> </div > <input type ="hidden" name ="c" value ="3" id ="c" /> <div > <input type ="checkbox" name ="f" value ="8" checked ="true" /> <input type ="checkbox" name ="f" value ="9" checked ="true" /> </div > </form>; $("#holder" ).serialize (); $("#holder" ).serializeArray ();
serialize 和 serializeArray 都是针对 JQuery 对象(选中的 form 元素)进行操作,只是返回值格式不同而已。
这里特别要注意:这 2 个 API 只能操作 form,如果将 holder 改成 div,会发现不起作用
jsonp 1 2 3 4 5 6 7 8 9 function getBooks ( ) { $.ajax ({ type : "get" , url : "http://test.com/bookservice.php" , dataType : "jsonp" , jsonp : "callback" , jsonpCallback : "displayBooks" , }); }
当然使用 jsonp 会在一定程度上造成安全性问题,如果请求的站点不是信任站点,那么可能会在返回的方法调用中包含一些恶意代码。
所以尽量向信任的站点发送请求。另外 xss 也经常会利用 jsonp 向站点注入恶意代码。