参考来源:《锋利的jQuery》第二版
本文是对jQuery的梳理,阅读起来可能很不顺畅。
PDF带思维导图,阅读体验更好 链接:https://pan.baidu.com/s/1-OAtwUFlmbIXZbCkX0C9Rw 提取码:trv4
如果获取的对象是jQuery对象,那么在变量前面加上$。
var $obj = $("#obj");jQuery提供了两种方法转换为Dom对象,get(index)和[index]。
var $obj = $("#obj"); //jQuery对象 var cc = $obj[0]; //cc就是DOM对象,get(0)方法也可以获取对于一个DOM对象,只需要用$把DOM对象包起来即可。
var obj = document.getElementById("obj"); //DOM对象 var cc = $(cc); //jQuery对象:nth-child()选择器是很常用的子元素过滤选择器,详细功能如下。
:nth-child(even)能选取每个父元素下的索引值是偶数的元素。:nth-child(odd)能选取每个父元素下的索引值是奇数的元素。:nth-child(2)能选取每个父元素下的索引值等于2的元素。:nth-child(3n)能选取每个父元素下的索引值是3的倍数的元素,(n从1开始)。:nth-child(3n+1)能选取每个父元素下的索引值是(3n+1)的元素。(n从1开始)( " : i n p u t " ) 包 括 i n p u t 、 b u t t o n 、 s e l e c t 、 t e x t a r e a < b r > 其 他 的 形 如 : (":input") 包括input、button、select、textarea<br> 其他的形如: (":input")包括input、button、select、textarea<br>其他的形如:(":text"),其他如:password、radio、checkbox、submit、img、reset、file
如果带有特殊符号,需要使用\来转义
通过jQuery的工厂函数$()
$("ul").append($("<li></li>")) //创建li并添加到ul中remove()
$(“div[id=one]”).remove() 该结点删除后,其子元素都会被删除,并且返回值是这个被删除元素的引用,因此可以用变量接受后再次使用 也可以传参选择性删除
empty() 清空所有子元素
wrap()
("strong").wrap("<b></b>")结果是:
<b><strong></strong></b> <b><strong></strong></b>wrapAll()方法 结果是:
<b> <strong></strong> <strong></strong> </b>如果中间还有其他元素,会把其他元素放置到后边
wrapInner()方法 该方法将每一个匹配的元素的子内容(包括文本节点)用其他结构化的标记包裹起来。例如
$("strong").wrapInner("<b></b>")可以使用它来包裹<strong>标签的子内容,代码如下:
<strong title="选择你最喜欢的水果." ><b>你最喜欢的水果是?</b></strong>html() = js中的innerHTML
text() = js中的innerText
val() = js中的value属性
除此之外,val()还能使select(下拉列表框)、checkbox(多选框)和radio(单选框)相应的选项被选中,在表单操作中会经常用到。
如果只选择一个,传一个参数,如果选中多个,传递一个数组
children() 子元素的集合
next() 紧邻的同辈元素
prev() 前面紧邻的同辈元素
siblings() 匹配前后所有同辈元素
closest() 该方法用于取得最近的匹配元素。首先检查当前元素是否匹配,如果匹配则直接返回元素本身。如果不匹配则向上查找父元素,逐级向上直到找到匹配选择器的元素。如果什么都没找到则返回一个空的jQuery对象。
parent() parents() closest() 三者的区别
parentparentsclosest在父结点查找在祖先结点查找先在同级找,同级找不到在去祖先找还有find()、filter()、nextAll()和prevAll()等元素,待补充
height()/width()
获取/设置元素的高度,也可以使用css()。
css()方法获取的高度值与样式的设置有关,可能会得到"auto",也可能得到"10px"之类的字符串;而 height()方法获取的高度值则是元素在页面中的实际高度,与样式的设置无关,并且不带单位。
offset()获取当前元素在当前视窗的相对便宜,返回的对象包含两个属性 top和left,并且只对可见元素有效。
position()获取元素相对于最近的一个position样式属性设置为relative或者absolute的祖父节点的相对偏移,它返回的对象也包括两个属性, top和left
scrollTop()方法和scrollLeft()方法这两个方法的作用分别是获取元素的滚动条距顶端的距离和距左侧的距离。
另外,可以为这两个方法指定一个参数,控制元素的滚动条滚动到指定位置
jQuery使用$(document).ready()为元素添加事件
$(document).ready()和document.onload()的区别
document.onload()$(document).ready()所有元素加载完毕后执行DOM树加载完毕即执行,但此时可能某些元素还未加载,无法对其操作,所以jQuery提供了load()方法。如果处理函数load()绑定给window对象,则会在所有内容(包括窗口、框架、对象和图像等)加载完毕后触发,如果处理函数绑定在元素上,则会在元素的内容加载完毕后触发。
$(window).load(function(){ });在之前写js的时候,经常这么写:
window.onload=function(){ function1(); function2(); }用来在网页加载完毕后执行这两个方法。这么写没啥大问题,但是遇到多个js文件都要使用window.onload()时就很麻烦。
因为onload事件一次只能保存一个对一个函数的引用,如果写两个, 会自动用后面的覆盖掉前面的。
而jQuery就不会,jQuery会在先有的行为上追加,按照注册的顺序执行,所以完全可以这么写:
$(document).ready(function(){ function1(); }) $(document).ready(function2(){ function2(); })或者
$().ready(function(){ //$()不带参数,表示document })调用格式:bind(type[,data],fn)
第一个参数是事件类型:blur、focus、load、resize、scroll、unload、click、dblclick、mousedown、mouseup、mousemove、mouseover、mouseout、mouseenter、mouseleave、change、select、submit、keydown、keypress、keyup和error等,也可以是自定义。
第二个参数可选,最为event.data的属性值传递给事件的额外数据对象。
第三个参数是用来绑定的函数。
比如:
$(function(){ $("#id").bind("click",function(){ alert("666"); }) })比较骚气的是,可别忘了这玩意可以链式调用:
$(function(){ $("#id").bind("click",function(){ }).bind("mouseout",function(){ }) })当然还可以这样:
$(function(){ $("#id").bind("mouserover mouseout",function(){ }) })当然,如果事件多了,都这么写还是有点麻烦的,所以jQuery对这些常用的click、mouseout等事件提供了简写方式:
$("#id").click(function(){ })hover() 语法格式:hover(enter,leave) 触发 mouseenter 和 mouseleave 事件,如果只传一个参数,两个都执行。
toggle() 语法格式:toggle(fn1,fn2.....fnn) 用于模拟鼠标连续点击事件,当点击第一次,执行fn1,往后顺序轮番执行
toggle()方法在jQuery中还有另外一个作用:切换元素的可见状态
比如:
<body> <div> <span></span> </div> </body>这三层都分别绑定了事件,单击span时不仅触发了span的事件,其他两层的事件也会触发。
事件会按照DOM层次不断向上直至顶端,这就是事件冒泡。
问题显而易见。
为了解决这个问题,jQuery提供了一些方法。
先铺垫下,jQuery中存在事件对象的概念:
$("#id").bind("click",function(event){ //这个event就是事件对象 })停止事件冒泡:
$("#id").binf("click",function(event){ //其他逻辑 event.stopPropagation(); })阻止默认行为:preventDefault();
比如超链接,点击就会跳转。
当然还有一个终极大法:return false;
jQuery不支持事件捕获。
event.type
上面提到的两个方法
event.target获取触发事件的元素
$("a[href='http://www.baidu.com']").click(function(event){ vat tg = event.target; //获取事件对象 alert(tg.href); return false; //阻止默认跳转行为 })event.relatedTarget
返回与事件的目标节点相关的节点。
对于 mouseover 事件来说,该属性是鼠标指针移到目标节点上时所离开的那个节点。
对于 mouseout 事件来说,该属性是离开目标时,鼠标指针进入的节点。
对于其他类型的事件来说,这个属性没有用。
event.pageX和event.pageY
该方法的作用是获取到光标相对于页面的x坐标和y坐标。如果页面上有滚动条,则还要加上滚动条的宽度或高度。
$("a").mousedown(function(event){ alert(event.which); }) $("a").keyup(function(e){ alert(e.which); })更多事件待补充 可能不补充了,太多了,看https://api.jquery.com/category/events/
比如:$("#id").click();模拟点击操作,也可以用trigger("click"),此外,trigger还可以触发自定义事件
trigger(type[,data])用来传递数据
$("#bt").bind("myfun",function(event,m1,m2){ alert("数据:"+m1+m2); }); $("#bt").trigger("myfun",["数据1","数据2"]);triggerHandler()
触发被选元素的指定事件类型。但不会执行浏览器默认动作,也不会产生事件冒泡。
triggerHandler() 方法与 trigger() 方法类似。不同的是它不会触发事件(比如表单提交)的默认行为,而且只影响第一个匹配元素。
因为参考的是《锋利的jQuery》,
版本交老,现在都3.5.1了!
后续增删改