jQuery学习笔记

1、初识jQuery

1.1jQuery库中,$就是jQuery的一种简写形式,$.ajax()==jQuery.ajax(),如果没有特别说明,程序中的$符号都是jQuery的一个简写形式。

 

1.2$(document).ready(function(){

//执行的代码

});

网页中所有DOM结构绘制完毕后就执行,可能dom元素关联的东西并没有加载完。Window.onload是等页面所有内容加载完毕之后(包括图片)才执行,与之相似。

 

1.3、链式操作风格:对于同一个对象,可以有很多个操作写在一起顺序执行。

例如:一个简单的导航栏样式代码(点击展开子项,并且高亮显示当前项)

$(“leve > a”).click(function(){ //leve <li>元素的class名称

$(this).addClass(“testClassName”) //给当前元素添加“testClassName”样式

.next().show() //下一个元素显示

.parent().siblings().children(“a”).removeClass(“testClassName”)

//父元素的同辈元素的子元素<a>移除“testClassName”样式

.next().hide(); //他们的下一个元素隐藏

Return false;

});

 

1.4DOM对象(document object model,文档对象模型),每一份dom都可以表示成一颗树,通过document.getElementById(“id”)等方法来获取,可以使用js中的方法,如innerHTNLchecked....

 

1.5jQuery对象就是通过jQuery包装DOM对象后产生的对象,是jQuery独有的,与DOM对象不等价。$(“#id”).html等价于document.getElementById(“id”).innerHTML。两者方法不能混用。

 

1.6jQuery对象和DOM对象相互转换

var $cr=$(“#id”);  //约定jQuery对象名前面加一个$区分,$crjquery对象;

var cr=$cr[0];     //crDOM对象

var cr=$cr.get(0);

 

var cr2=document.getElementById(“id”);//DOM对象转换为jQuery对象

var $cr2=$(cr2);

 

1.7注意:平时用的jQuery对象都是$()函数制造出来的,$()函数就是一个jQuery对象制造工厂。

 

1.8注意:判断是否被选中 $cr.is(“:checked”)等价于cr.checked,返回值都是boolean类型。

 

1.9jQuery在其他库之后导入和其他库的产生冲突:jQuery可以随时使用JQuery.noConflict();将变量$的控制权移交给其他库,自己则使用jQuery()函数作为对象制造工厂,其他库将使用$。如果是之前导入则不用使用JQuery.noConflict();交出控制权。

 

1.10$(“#id”);获取的永远是对象,因此不能用此方法来判断页面上有没有这个元素,因该用$(“#id”).length>0或者用$(“#id”)[0]转换为DOM对象来判断。

 

2 jQuery选择器

2.1、基本选择器

·根据id选择:$(“#id”)选取id属性为相应值的元素;

·根据类名选择:$(“.className”)选取所有相同类名的元素;

·根据元素名称选择:$(“div”)选取所有的div元素;

·选取所有元素:$(“*”)

·多种选择一起:$(“div,span,p.className”)选取所有divspan和拥有classclassName的所有p标签。

 

2.2、层次选择器

·$(“div span”)选取div里面的所有span元素(所有后代元素),返回集合元素;

·$(“div > span”)选取div下面元素名为span的所有子元素

·$(“#two”).next(“div”)选取紧接在idtwo元素后面的下一个div同辈元素;

·$(“#two”).nextAll(“div”)选取idtwo元素后面所有div同辈元素;

 

2.3、过滤选择器(使用较多的)

·$(“div:first”)选取页面中所有div元素中的第一个div元素;

·$(“span:last”)选择页面中所有span元素中的最后一个span元素;

·$(“:focus”)选择当前获取焦点的元素;

·$(“:header”)选择网页中所有<h>元素;

·$(“input:even”)选取索引是偶数的input元素;

·$(“input:old”)选取索引是奇数的input元素;

·$(“input:eq(index)”) 选择索引为indexinput元素(index0开始);

·$(“input:not(.className)”)选取class不是classNameinput元素;

 

2.4、内容过滤选择器

·$(“div:contains(“我”)”) 选择文本含有“我”的div元素;

·$(“div:empty”) 选择不包含子元素(包括文本元素)的div空元素;

·$(“div:has(span)”) 选择含有span元素的div元素;

·$(“div:parent”) 选择拥有子元素(包括文本元素)的div元素。

 

2.5、可见性过滤选择器(常用)

·$(“:hidden”) 选择所有不可见元素,包括<input type=”hidden” />,<div style=”display:none;”><div style=”visibility:hidden;”>等元素;$(“input:hidden”) 只选择input元素;

·$(“div:visible”) 选取所有可见的div元素。

 

2.6、属性过滤选择器(常用的几种)

·$(“div[id]”) 选择拥有id属性的div元素;

·$(“div[id==test]”) 选择id属性等于testdiv元素;

·$(“div[title!=test]”) 选择title属性不等于testdiv元素(注意:没有title属性的div元素也会被选中);

·$(“div[id][title]”) 联合使用。

 

2.7、子元素过滤选择器

·$(“div :nth-child(index/even/old/equation)”) 选择div父元素下的第index个子元素或奇偶子元素(注意索引从1开始);

·$(“div.one :first-child”) 选择classonediv父元素下的第一个子元素;

·$(“div.one :last-child”) 选择classonediv父元素下的最后一个子元素;

·$(“div.one :only-child”) 如果classonediv父元素下只一个子元素则选中,没有就不选中。

 

2.8、表单对象属性过滤选择器

·$(“input:checked”) 选择所有被选中的input元素;

·$(“select option:selected”) 选取所有被选中的选项元素;

·$(“#name :enabled”) 选择idname表单内所有可用元素;

·$(“#name :disabled”) 选择idname表单内所有不可用元素;

·$(“:input”) 选取所有的inputtextarea,select,button元素;

·$(“:text”) 选择所有的单行文本框;

·$(“:password”);

·$(“:radio”);

·$(“:checkbox”);

·$(“:submit”);

·$(“:image”);

·$(“:reset”);

·$(“:button”);

·$(“:file”);

·$(“:hidden”);

 

3jQuery中的DOM操作

3.1、创建节点

使用jQuer的工厂函数$()可以将你传入的html字符串包装成一个jQuery对象返回,然后再通过jQuery中的append()等方法插入文档中。

var html=”<div id=’test’>abcdefg</div>”;

Var $div=$(html);         //创建一个DOM对象,并包装成一个jQuery对象返回给$div

$(“#div2”).append($div);   //$div插入到页面id属性为div2的元素中。

 

3.2、插入节点

·append();向匹配的元素内追加内容。

例:$(“p”).append(“<span>hello</span>”);<p>哈哈<span>hello</span></p>

 

·appendTo();将新增的内容追加到匹配的元素中。

例:$(“<span>hello</span>”).appendTo(“p”);<p>哈哈<span>hello</span></p>

 

·prepend();向匹配的元素内前置内容。

例:$(“p”).prepend(“<span>hello</span>”);<p><span>hello</span>哈哈</p>

 

·prependTo();将新增的内容前置到匹配的元素中。

例:$(“<span>hello</span>”).prependTo(“p”);<p><span>hello</span>哈哈</p>

 

·after();在匹配的元素之后插入内容。

例:$(“p”).after(“<span>hello</span>”);<p>哈哈</p><span>hello</span>

 

·insertAfter();将内容插入到匹配的元素之后。

例:$(“<span>hello</span>”).insertAfter(“p”);<p>哈哈</p><span>hello</span>

 

·before();在匹配的元素之前插入内容。

例:$(“p”).before(“<span>hello</span>”);<span>hello</span><p>哈哈</p>

 

·insertBefore();将内容插入到匹配的元素之前。

例:$(“<span>hello</span>”).insertBefore(“p”);<span>hello</span><p>哈哈</p>

 

3.3、删除节点

·remove();

DOM中删除匹配的节点后,该节点所包含的所有后代节点将同时被删除。此方法返回被删除节点的引用,因此此后还可以继续使用被删除的节点对象。remove()方法中可以接收选择参数,比如remove(“div[title!=雷涛]”)

·detach();

DOM中删除匹配的节点后,不会把删除的元素从jQuery中删除掉,将来可以继续使用这些元素,与remove不同的是,此方法会保留删除元素的附加数据和绑定的事件。

·empty();

清空节点,包括所有后代节点。只会删除节点中内容,会保留节点本身(节点text文本也会被清空)。

 

3.4、复制节点

clone(true);此方法中传入参数true表示复制元素的同时复制元素中所绑定的事件。

 

3.5、替换节点

replaceWith();将匹配的元素替换成指定的html或者DOM元素;

replaceAll();将替换的内容替换指定匹配的元素,与replaceWith();颠倒操作;

注意:两者替换都不会保留被替换元素之前绑定的事件,新元素要重新绑定自己的事件。

 

3.6、包裹节点

·wrap(); 将所有匹配到的元素单独进行包裹;

例:$(“strong”).wrap(“<b></b>”);

<b><strong>aaa</strong></b>

  <b><strong>bbb</strong></b>

 

·wrapAll(); 将匹配到的所有元素用一个元素来包裹;

例:$(“strong”).wrapAll(“<b></b>”);

<b>

<strong>aaa</strong>

<strong>bbb</strong>

  </b>

 

·wrapInner(); 将每一个匹配到的元素的子内容(包括文本节点)用其他结构的标记包裹起来。

例:$(“strong”).wrapInner(“<b></b>”);

<strong><b>aaa</b></strong>

  <strong><b>bbb</b></strong>

 

3.7、属性操作

·$(“div”).attr(“title”);

获取divtitle属性值。

 

·$(“div”).attr(“title”,”雷涛”);

设置divtitle属性值为“雷涛”。

 

·$(“div”).attr({“title” : ”雷涛” , “name” : “java”});

设置多个属性。

 

·$(“div”).removeAttr(“title”);

删除div元素的title属性。

 

3.8、样式操作

·$(“div”).attr(“class”,”className1”);

div新增一个class=”className1”属性。

 

·$(“div”).addClass(“className2”);

divclass属性中添加一个className2的属性,div的属性变为class=”className1 className2”。

 

·$(“div”).removeClass(“className1 className2”);

删除div元素的className1className2样式。

 

·$(“#changeStyle”).toggle(function(){

//代码1

},function(){

//代码2

});

toggle()方法此处的作用是交替执行代码1和代码2,是行为上的重复切换

 

·$(“div”).toggleClass(“className”);

div样式上重复切换。如果divclass=”className” 当点击“切换样式”按钮式就会移除className属性值,反之就会给div加上className属性值。

 

·$(“div”).hasClass(“className”);

判断div中是否含有值为classNameclass,有返回true,反之返回false

 

3.9、设置、获取HTML、文本和值

·html();

类似于js中的innerHTML属性,用来获取或者设置某个元素中的HTML内容

 

·text();

类似于js中的innerText属性,用来读取或者设置某个元素中的文本内容

 

·val();

类似于js中的value属性,用来设置或者获取某个元素的。无论元素是文本框,下拉列表还是单选框,都可以返回元素的值。如果元素为多选,则返回一个包含所有选中的值的数组。

 

3.10、遍历节点

·children();

获取匹配元素的子元素集合。

 

·next();

获取匹配元素后面紧邻的同辈元素。

 

·prev();

获取匹配元素前面紧邻的同辈元素。

 

·siblings();

获取匹配元素前后的所有同辈元素。

 

·closest();

从元素本上开始向上逐级查找匹配的元素,并返回最先匹配的祖先元素。(首先检查当前元素是否匹配,不匹配则向上查找父元素。)

 

·parent();

获取匹配元素的父级元素,只返回一个元素节点。

 

·parents();

获取匹配元素的所有祖先元素,可能返回多个父元素节点。

 

3.11CSS-DOM操作

·css();

获取或者设置匹配元素的样式。

$(“#test”).css(“color”);//获取color样式的值;

$(“#test”).css(“color”,”red”);//设置id属性为test的颜色为红色;

 

·height();

获取或者设置匹配元素height属性。

 

·width();

获取或者设置匹配元素width属性。

 

·offset();

获取匹配元素在当前视窗的相对便宜,返回对象包含topleft两个属性。

var offset=$(“div”).offset();

  var top=offset.top;

  var left=offset.left;

 

·position();

获取元素相对于最近一个position样式属性设置为relative或者absolute的祖父节点的相对偏移,与offset一样返回topleft两个属性。

·scrollTOp();

获取元素滚动条距离顶端的距离。

·scrollLeft();

获取元素滚动条距离左侧的距离。

 

 

4、jQuery中的事件和动画

4.1、事件

4.1.1、加载DOM

·window.onload$(document).ready()的执行时机

前者会等页面上所有元素(包括元素所有关联文件)完全加载完毕后才执行。$(document).ready()方法只需要DOM就绪就可以执行。因此后者执行的速度要快于前者。

 

·多次使用

window.onload事件一次只能保存对一个方法的调用,会自动用后面调用的方法覆盖前面的调用的方法,因此不能在现有的行为上添加新的行为。

$(document).ready()每次调用此方法都会给现有的行为追加新的行为,这些行为方法会根据注册的顺序依次执行。

 

·简写方式(两种)

$(function(){

//业务代码

});

$().ready(function(){

//业务代码

});

 

4.1.2、事件绑定

·当文档装载完毕后可以使用bind(type[,data],function)来匹配元素进行特定事件绑定。

type是事件类型(必须):

blurfocusload

resize(窗口改变大小监听),

scroll(元素滚动监听),

unload(离开页面监听),

click

dblclick(双击监听),

mousedown(当鼠标指针移动到元素上方,并按下鼠标按键时监听),

mouseup(当在元素上放松鼠标按钮时监听),

mousemove(当鼠标指针在指定的元素中移动时监听),

mouseover(当鼠标指针位于元素上方时监听),

mouseout(当鼠标指针从元素上移开时监听),

mouseenter(当鼠标指针穿过元素时监听),

mouseleave(在鼠标离开某个元素时监听),

changeselectsubmit

keydown(当按钮被按下时监听,如果是输入框,则输入按下键盘是监听),

keyup(与keydown相反),

keypress(它发生在当前获得焦点的元素上。不过,与 keydown 事件不同,每插入一个字符就会发生 keypress 事件。如果在文档元素上进行设置,则无论元素是否获得焦点,该事件都会发生。),

error

也可以自定义名称

 

data是可选参数,作为event.data属性值传递给事件对象的额外数据对象。

 

function是用来绑定的处理函数。

 

$(“div”).bind(“click”,function(){

alert(“abc”);//div绑定单击事件,点击弹出框。

})

→简写方式

$(“div”).click(function(){

alert(“abc”);//div绑定单击事件,点击弹出框。

})

 

4.1.3、合成事件

·hover()方法

此方法用于模拟光标悬停事件。当光标移动到元素上时,会触发指定的第一个方法(enter);当光标移出这个元素时,会触发指定的第二个方法(leave)。

→给div中的span绑定一个方法,当鼠标移动到上面时显示span下一个元素,鼠标移出时隐藏下一个元素。

$(function(){

$(“div span”).hover(function(){

$(this).next().show();

},function(){

$(this).next().hide();

});

});

 

·toggle(fn1,fn2,fn3...,fnN)方法

此方法用于模拟鼠标单击事件,第一次单击触发fn1方法,第N次单击触发fnN方法,一次触发,每次单击都会对这几个函数轮播调用

→给div中的span绑定单击事件,点击显示span下一个元素,再一次点击则隐藏span下一个元素。

$(function(

$(“div span”).toggle(function(){

$(this).next().show();

},function(){

$(this).next().hide();

});

));

 

注意toggle()方法在jQuery中还有另一个作用:切换元素的可见状态。如果是可见的就点击就隐藏,如果是隐藏的点击就显示,则上面的代码可修改为:

$(function(

$(“div span”).toggle(function(){

$(this).next().toggle();

},function(){

$(this).next().toggle();

});

));

 

4.1.4、事件冒泡

·什么是事件冒泡

当给多层嵌套的元素分别绑定click事件时,点击最里层的元素会从里到外依次触发各个元素的事件,事件会按照DOM的层次结构像水泡一样不断向上直至顶端,因此称为事件冒泡。

 

·事件对象

事件对象只有事件处理方法才能访问到,事件方法执行完毕后事件对象就被销毁了。

使用事件对象只需要想方法添加一个参数:

$(“span”).click(function(event){

//...

});

 

·停止事件冒泡

在代码中使用stopPropagation()来停止事件冒泡,这样当执行完最里层的触发方法时,不会执行外层的方法。

$(“span”).click(function(event){

alert(“执行了最里层的方法!”);

event.stopPropagation();

//也可以使用简写形式:return false代替

});

 

·阻止默认行为

在表单验证中如果输入框不合规则就不能提交,此时可以使用preventDefault()方法来组织submit提交行为。

→如果输入框为空不能提交,为submit绑定点击事件

$(function(){

$(“#submit”).bind(“click”,function(event){

var value=$(“#userName”).val();

if(value==””){

alert(“用户名不能为空!”);

event.preventDefault();

//也可以使用简写形式:return false替代。

}

});

});

 

4.1.5、事件对象属性

·event.type

获取事件的类型。

$(“a”).click(function(event){

alert(event.type);//弹出结果:“click

return false; //阻止链接跳转

});

 

·event.preventDefault();

 

·event.stopPropagation();

 

·event.target

获取触发事件的元素

$(“a[href=’http://www.baidu.com’]”).click(function(event){

var tg=event.target;//获取事件对象

alert(tg.href); //弹出结果:“http://www.baidu.com

return false;

});

 

·event.pageXevent.pageY

获取到光标相对于页面的x坐标和y坐标,如果页面上有滚动条,则还要加上滚动条的宽度和高度。

 

·event.which

在鼠标单击事件中获取鼠标的左中右键,在键盘事件中获取键盘的按键。

→获取鼠标的按键

$(“a”).mousedown(function(event){

alert(event.which);

//1=鼠标左键;2=鼠标中键;3=鼠标右键。

});

→获取键盘按键

$(“input”).keyup(function(event){

alert(event.which);

});

 

·event.metaKey

jQuery中为键盘事件中获取<ctrl>按键。

 

4.1.6、移除事件

·unbind([type],[function]);

type是事件类型,比如clickmousedown等等。function是处理函数名。

注意:1、如果没有参数,则移除元素所有绑定的事件;

$(“#btn”).unbind();

  2、如果事件类型type不为空,则只移除相应类型的事件;

$(“#btn”).unbind(“click”);

  3、如果处理函数function不为空,则只移除相应function的事件。

$(“#btn”).unbind(“click”,myfunctionName);

 

·one();

可以为元素绑定只能触发一次的处理函数,每个函数只能执行一次,执行完成后立即被删除。

$(“#btn”).one(“click”,function(){

alert(“你点击了按钮!”);

});

 

4.1.7、模拟操作

·常用模拟

$(“#btn”).trigger(“click”);//等同于$(“#btn”).click();

 

·触发自定义事件

$(“#btn”).trigger(“myClick”);

 

·传递参数

$(“#btn”).trigger(“myClick”,[“hello”,”你好”]);

$(“#btn”).bind(“myClick”,function(msg1,msg2){

alert(msg1+msg2);//弹出结果为“hello你好”

});

 

·执行默认操作

triggerHandler();方法只触发为元素绑定的事件而不会执行浏览器默认操作。

 

4.2jQuery动画(简单的几种)

4.2.1show()方法和hide()方法

·hide()方法是将style中的display设置为none,并记住原先的display属性值;

·show()方法是将display方法复原为hide记住的属性值。

·速度关键字:slow600毫秒)、normal400毫秒)、fast200毫秒)或者指定一个数字(单位是毫秒)

$(“div”).show(“slow”);//同等于$(“div”).show(600);

      

4.2.2fadeIn()方法和fadeOut()方法

·fadeOut()方法在指定的时间内降低元素的不透明度,直到元素完全消失(displaynone);fadeIn()方法则相反。

→点击divdiv下一个元素慢慢消失(淡出),再点一次又慢慢显示(淡入)。

$(“div”).toggle(function(){

$(“div”).next().fadeOut();

},function(){

$(“div”).next().fadeIn();

});

 

4.2.3slideUp()方法和slideDown()方法

·两个方法只会改变元素的高度。如果一个元素的display属性为none,当调用slideDown()方法时,这个元素将由上至下延伸显示slideUp()正好相反,元素将由下至上缩短隐藏

$(“div”).toggle(function(){

$(“div”).next().slideDown();

},function(){

$(“div”).next().slideUp();

});

 

 

5、jQuery ajax

·serialize()方法。

此方法能够将DOM元素内容序列化为字符串,主要用于ajax请求。不仅仅用于表单的序列化,其他的选择器也可以使用。serialize()方法会自动编码,因此在对于中文问题不必使用encodeURLComponent()方法进行编码。

$(“#formId”).serialize();

  $(“:checkbox,:radio”).serialize();//将选中的值序列化为字符串。

 

·serializeArray()方法

serialize()方法类似,只不过将DOM序列化后返回json格式的数据。

 

·$.param()方法

此方法是serialize()方法的核心,用来对一个数组或者对象按照key/value进行序列化。

var obj={a:1,b:2,c:3};

var k=$.param(obj);

alert(k);//输出“a=1&b=2&c=3;

 

 

 注意:此文档为本人看书学习笔记,分享出来意在相互交流学习,转载请注明出处。

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值