jquery基础

jQuery

|| window.onload | $(document).ready() | | ——–| —–: | |执行时机 | 必须等待网页内的所有内容加载
完毕之后(包括图片)才能执行 |网页中所有dom结构绘制完毕后就执行,可能dom元素
关联的东西没有加载完| | 编写个数 |不能同时编写多个|能同时编写多个| | 简化语法 | 无 |$(document).ready(function(){
//….
});
可以简写成$(document).ready(function (){
//….
})

jquery对象

jquery对象就是通过jQuery包装dom对象后产生的对象

jQuery对象是jQuery独有的,如果一个对象是jquery对象,那么就可以使用jQuery里的方法,在jQuery对象中无法使用dom对象的任何方法,同样,dom对象也不能使用jquery里的方法

jQuery对象转成dom对象

1.[index]

jQuery对象是一个类似数组的对象,可以通过[index]的方法得到相应的dom对象

var $cr = $("#cr"); 	//jQuery对象 
var cr = $cr[0];//dom对象

2.get(index)

var $cr = $(“#cr”) ; //jQuery对象 var cr = $cr.get(0); //dom对象

dom对象转成jQuery对象

对于一个dom对象,只需用$()把dom对象包装起来,就可以获得一个jQuery对象

var cr = document.getElementById("id");  //dom对象
var $cr = $(cr);   //jQuery对象

解决jQuery和其他库的冲突

在其他库和jQuery库都被加载完毕后,可以在任何时候调用jQuery.noConflict()函数来将变量$的控制权移交给其他JavaScript库

    jQuery.noConflict();
    jQuery(function(){
    //......
    })
    $("pp").style.display = "none"; //使用prototype.js隐藏元素

可以自定义快捷方式

var $j = jQuery.noConflict();
$j(function(){
//....
})

$("pp").style.display = "none";

如果不想给jQuery自定义这些备用名称,还想使用$而不管其他库的$()方法,同时又不想与其他库冲突,可以有两种解决方式

一:

jQuery.noConflict();
jQuery(function($){   //使用jQuery设定页面加载时执行的函数

//...
})
$("pp").style.display = "none";

二:

jQuery.noConflict();
(function($){ //定义匿名函数并设置形参为$
$(function(){  //匿名函数内部的$均为jQuery
//....

})

})(jQuery);  //执行匿名函数且传递实参为jQuery

$("pp").style.display = "none";

可以先导入jQuery库,之后在导入其他库,就无需调用jQuery.noConflict()函数

jQuery选择器

jQuery获取的永远是对象,即使选中节点不存在

if($("#id")){
//do something
}//永远为真

if($("#id")[0]){
//do something
}  //可以通过转换为dom对象判断

if($("#id").length > 0){
//do something
}  //也可以判断元素长度

id : $(“#id”)

class : $(“.class”)

标签选择器 $(“div”)

通配选择器 $(“*”)

群组选择器 $(“span,#to”)

层次选择器

$(“div span”) 选取div里的所有span元素(后代元素为所有子节点)

$(“div>span”) 选取div里的子元素中的span元素(子元素只包含一层元素)

$(“#id+span”) 选取id的下一个span同辈元素

$(“#id~span”) 选取id后面的所有的span同辈元素

层次选择器中前两个选择器比较常用,后两个可以在jQuery中用更加简单的方法代替

$(".one+div"); 		$(".one").next("div");

$("#prev~div"); 	$("#prev").nextAll("div"); 

基本过滤器选择器

:first  选取第一个元素  $("div:first")   选取所有div元素中的第一个div元素

:last  选取最后一个元素 同理

:not(selector)   去除所有与给定选择器匹配的元素  $("input:not(.myclass)")  选取class不是myclass的input元素

:even 选取索引是偶数的所有元素,索引从0开始  $("input:even")  选取索引是偶数的input元素

:odd  选取索引是奇数的所有元素,索引从0开始 同上

:eq(index)  选取所有等与index的元素(index从0开始)  $("input:eq(1)")  选取索引等于1的input元素

:gt(index)  选取索引大于index的元素(index从0开始) 大于1而不包括1
  
:lt(index)  选取索引小于index的元素(index从0开始)  小于1而不包括1

:header  选取所有的标题元素  $(":header")  选取网页中所有的h1

:animated 选取当前正在执行动画的所有元素  $("div:animated")选取正在执行动画的div元素

:focus  选取当前获取焦点的元素  $(":focus")

内容过滤选择器

:contains(text)  选取含有文本内容为"text"的元素  

:empty  选取不包含子元素或文本的空元素

:has(selector)  选取含有选择器所匹配的元素的元素  $("div:has(p)")选取含有p元素的div元素

:parent 选取含有子元素或者文本的元素   $("div:parent")选取拥有子元素的(包括文本元素)的div元素

可见性过滤选择器

:hidden 选取所有不可见的元素

:visible  选取所有可见的元素

属性过滤选择器

"”和”“是不能嵌套的,平时在使用的时候尽量使用’‘,如果需要嵌套的话使用”“和’‘两种引号进行嵌套,或者内层干脆不用引号

[attribute]  选取拥有此属性的元素   $("div[id]")  选取拥有属性id
的元素

[attribute = value]  选取属性的值为value的元素  $("div[title=test]")  选取属性title为test的div元素

[attribute!=value]  选取属性的值不等于value的元素  $("div[title!=test]")  选取属性title不等于test的所有div元素 没有title属性的div元素也会被选取

[attribute^value] 选取属性的值以value开始的元素  $("div[title^=test]")   选取属性title以test开始的元素

[attribute$=value]  选取属性的值以value结束的元素  

[attribtue*=value]  选取属性的值含有value的元素

[attribute|=value] 选取属性等于给定字符串或以该字符串为前缀的元素(该字符串后跟一个连字符-)		$("div[title|="en"]") 选取属性title等于en或以en为前缀(该字符串后跟一个连字符-)的元素

[title~="uk"]   选取属性title用空格分割的值中包含字符uk的元素

[attribute1][attribute2][attributeN]  用属性选择器合并成一个符合属性选择器,满足多个条件,每选择一次,缩小一次范围	$("div[id][title$="test"]")选取拥有属性id,并且属性title以test结束的div元素

子元素过滤选择器

:nth-child(index/even/odd/equation)		选取每个父元素下的第index个子元素或奇偶元素,(index从1开始)		:eq(index)只匹配一个元素,而:nth-child将为每一个父元素匹配子元素,并且:nth-child(index)的index是从1开始的,而:eq(index)是从0开始



:first-child  选取每个父元素的第一个子元素		:first只返回单个元素.而:first-child选择符合将为每个父元素匹配第一个子元素   例如$("ul li:first-child") 选取每个ul中第一个li元素

:last-child   选取每个父元素的最后一个子元素   $("ul li:last-child") 选择每个ul中最后一个li元素

 :only-child   如果某个元素是他父元素中唯一的子元素,那么将会被匹配.如果父元素中含有其他元素,则不会被匹配   $("ul li:only-child")  在ul中选取是唯一子元素的li元素

:nth-child()选择器是很常用的子元素过滤选择器,详细功能如下

1: :nth-child(even)能选取每个父元素下的索引值是偶数的元素

2: :nth-child(odd) 能选取每个父元素下的索引值是奇数的元素

3: :nth-child(2) 能选取每个父元素下的索引值等于2的元素

4: :nth-child(3n)能选取每个父元素下的索引值是3的倍数的元素(n从1开始)

5: :nth-child(3n+1)能选取每个父元素下的索引值是(3n+1)的元素(n从1开始)

注: eq(index)只匹配一个元素,而:nth-child将为每一个符合条件的父元素匹配子元素,同时应该注意到nth-child(index)的index从1开始,而eq(index)是从0开始,同理 :first 和 :first-child,:last 和:last-child也类似

表单对象过滤选择器

:enabled  选取所有可用元素 		$("#form1:enable")选取id为form1的表单内的所有可用元素

:disabled		选取所有不可用元素				$("#form1:enable")选取id为form1的表单内的所有不可用元素

:checked		选取所有被选中的元素(单选框,复选框) 		$("input:checked")选取所有被选中的input元素

:selected   选取所有被选中的选项元素(下拉列表)		$("select option:selected");	选取所有被选中的选项元素

表单选择器

:input 选取所有的input,textarea,select,button元素

:text  选取所有的type="text"的input元素

:password 选取所有的密码框

:radio 选取所有的单选框

:checkbox 选取所有的复选框

:submit  选取所有的type="submit"的input 和button元素

:image  选取所有的type="image"的input元素

:reset 选取所有的type="reset"的input 和button元素

:button 选取所有的按钮

:file 选择 type="file" 的 <input> 元素

选择器之间不能有空格,例如

$('.test :hidden')  //这种写法虽然不会报错,但与不带空格选中的元素不同

.

查找属性节点

var $para = $("p");

var ptext = $para.attr("title");  //获取p元素节点属性title

创建元素节点

$(html)方法会根据传入的html字符串,创建一个dom对象,并将这个dom对象包装成一个jQuery对象后返回,html方法不传入参数时,则为读取内容

var  $li = $("<li></li>");//创建一个li元素

$("ul").append($li); //添加到ul节点中

var $lit = $("<li id="s">yuansu</li>") //创建属性节点,可以直接在创建元素的时候一起创建

插入节点的方法

append()向每个匹配的元素内部追加内容

appendTo()  将所有匹配的元素追加到指定的元素中

prepend()  向每个匹配的元素内部前置内容

prependTo() 将所有匹配的元素前置到指定的元素中

after()   在每个匹配的元素之后插入内容

insertAfter()  将所有匹配的元素插入到指定元素后面

before() 在每个匹配的元素之前插入内容

insertBefore() 将所有匹配的元素插入到指定的元素的前面

删除节点

###remove()

remove方法删除某个节点后,其包含的后代节点也将被删除,同时返回一个被删除节点的引用,因此,即使节点被remove后,依然可以使用

var $li = $("ul li:eq(1)").remove(); 
$li.appendTo("ul")   //把刚刚删除的节点添加到ul节点中

###detach()

detach方法和remove一样,将删除选中节点以及其后代节点,但与之不同的是,在保留引用的同时detach()会保留被删除节点绑定的事件,附加的数据

###empty()

empty可以清空选中节点的所有后代节点,该方法不会移除元素本身,或它的属性,但会清空后代元素的绑定事件,附加数据,保留的引用中也会清空选中节点的后代节点

复制节点

clone()方法会复制选中节点,复制后的新元素不具有任何行为,如果需要同时复制行为可以通过在clone()方法中传入参数true

$(this).clone(true)

替换节点

replaceWith()

将所有匹配的元素都替换成指定的html或者dom元素

$('p').replaceWith("<strong></strong>")

replaceAll()

将指定的html或者dom元素替换到所有匹配的元素,replaceWith()的颠倒操作

$("<strong></strong>").replaceAll('p');

选中的元素在替换匹配元素的同时,其绑定的事件会清空,需要重新绑定

包裹节点

warp()

wrap() 方法把每个被选元素放置在指定的 HTML 内容或元素中。

$(‘strong’).warp(‘’) //用b标签将strong元素包裹起来

warpAll()

wrapAll() 在指定的 HTML 内容或元素中放置所有被选的元素。

输入:

<strong>1</strong>
<strong>2</strong>

$('strong').warpAll('<b></b>')

输出:

<b>
	<strong>1</strong>
	<strong>2</strong>
</b>

warpInner()

warpInner()将会把每一个匹配的元素的子内容(包括文本节点)用其他结构化的标记包裹起来

<strong>1111</strong>

$('strong').warpInner('<b></b>')

<strong><b>1111</b></strong>

属性操作

<strong title="s"></strong>

attr()用来读取指定属性

$('strong').attr('title');  //s

removeAttr() 删除指定属性

$('strong').remove('title');  //<strong></strong>

attr()方法在读取属性的同时,也可以用来设置属性

$('strong').attr('class','high');  //将strong的title属性设置为high,不可设置未设置属性的值

样式操作

addClass(); 方法向被选元素添加一个或多个类。 该方法不会移除已存在的 class 属性,仅仅添加一个或多个 class 属性。 提示:如需添加多个类,请使用空格分隔类名。

removeClass(); 方法向被选元素移除一个或多个类。提示:如需移除多个类,请使用空格分隔类名 当不传入参数时,会移除所有class类名

toggle() 切换元素的可见状态。 如果被选元素可见,则隐藏这些元素,如果被选元素隐藏,则显示这些元素。

$(selector).toggle(speed,callback,switch)

speed

在设置速度的情况下,元素从可见到隐藏的过程中,会逐渐地改变其高度、宽度、外边距、内边距和透明度。
如果设置此参数,则无法使用 switch 参数。

callback

可选。toggle 函数执行完之后,要执行的函数。
除非设置了 speed 参数,否则不能设置该参数。

switch

可选。布尔值。规定 toggle 是否隐藏或显示所有被选元素。
True - 显示所有元素
False - 隐藏所有元素
如果设置此参数,则无法使用 speed 和 callback 参数。

hasClass() 判断元素中是否含有某个class,如果有,返回true,否则返回false hasClass()方法可以用is()替换使用,hasClass知识为了增强代码可读性,如果用空格隔开传入多个参数,则需要全部匹配才返回true

$('p').is(".another");

html()

读取或设置某个元素的html内容

text()

类似于innerHtml属性,可以用来读取或者设置某个元素的文本内容

val()

可以用来设置或读取元素的值,无论元素是文本,还是下拉列表或者单选框,他都可以返回元素的值,如果元素为多选,则返回一个包含所有选择的值的数组

val()方法也可以改变选中项select传入content值,checkbox和radio传入value的值

children()

取得选中元素的子元素集合,不包括后代元素

next()

取得匹配节点后面紧邻的同辈元素

prev()

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

siblings()

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

parent()

取得匹配元素的父级元素

parents()

取得匹配元素的祖先元素

closest()

从元素本身开始,逐级向上元素匹配,并返回最先匹配的祖先元素

css-dom操作

无论样式属性是外部导入,还是拼接在html中,css()都可以获取到style属性里的值

css()

也可以用来设置属性的值 css(“color”,”red”)

height()

获取元素在页面中的实际高度,与样式设置无关,并且不带单位,可读可写

width()

获取元素在页面中的实际宽度,与样式设置无关,并且不带单位,可读可写

offset()

获取元素在当前视窗的相对偏移,其中返回的对象包含两个属性,即top和left,他只对可见元素生效

offset().left  //获取左偏移

offset().top  //获取上偏移

position()

获取元素到相对于最近的一个相对定位或者绝对定位的父级的相对偏移,其中返回的对象包含两个属性,即top和left

scrollTop()方法和scrollLeft()方法

获取元素的滚动条距顶端的距离和距左端的距离,可读可写

jQuery事件

$(document).ready()方法与window.onload类似,但做了许多优化

$().ready()可以多次注册事件,按注册的顺序依次执行.而window.onload则不可以多次调用,后注册的事件会覆盖先注册的事件在网页dom加载完毕就会执行,而此时有可能元素的关联文件未加载完毕

其简写方式

$(function(){})

$().ready(function(){})

事件绑定

bind(type[.data],fn)

第一个参数为事件类型,类型包括:blur,focus,load,resize,scroll,unload,click,dbclick,mousedown.mouseup,mousemove,mouseover,mouseout,mouseenter,change,select,submit,keydown,keypress,keyup,error,也可以是自定义名称

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

第三个参数则是用来绑定的处理函数

示例

     $(function(){
        $('.head').bind("click",function(){
            $(this).next().toggle(500);
        })
     })

大部分事件可以采用简写方式

     $(function(){
        $('.head').click(function(){
            $(this).next().toggle(500);
        })
     })

绑定多个事件类型

$(function(){
    $('div').bind("mouseover click",function(){
        //do something
    })
})

添加事件命名空间,便于管理

     $(function(){
        $('.head').bind("click.pl",function(){
            $(this).next().toggle(500);
        })
		$('.head').bind("mouseover.pl",function(){
        //do something
        })
        $('.content').click(function(){
            $('.head').unbind(".pl");
        })
     })

相同事件名称,不同命名空间的执行方法

     $(function(){
        $('.head').bind("click.pl",function(){
            $(this).next().toggle(500);
        })
		$('.head').bind("click",function(){
        //do something
        })
        $('.content').click(function(){
            $('.head').unbind("click!");//注意!
        })
     })

!的作用是匹配不在命名空间的方法

合成事件

hover(enter,leave)

当光标移动到元素上时,会触发指定的第一个函数,当光标移出这个元素时,会触发指定的第二个函数,该方法等同于mouseover和mouseout的效果,但是却是替代的bind(‘mouseenter’)和bind(‘mouseleave’),因为如果需要触发hover()的第二个函数时,需要用trigger(“mouseleave”)来触发,而不是trigger(“mouseout”)

$(function(){
       $('.head').hover(function(){
        $(this).next().show();
       },function(){
        $(this).next().hide();
       });
     })

toggle 切换元素的可见状态 上面有详细解释

     $(function(){
        $('.head').click(function(){
            $(this).next().toggle(100);
        })
     })

event事件

以下事件均需要传递event事件对象,jquery对这些事件进行了封装,使得能够兼容各个版本的浏览器

阻止事件冒泡 event.stopPropagation();

阻止默认行为 event.preventDefault();

如果想同时阻止事件冒泡和默认行为,只需要return false就可以了

获取事件类型 event.type

捕获到触发事件的元素 event.target

获取光标相对于页面的x坐标和y坐标 event.pageX event.pageY

获取鼠标单击事件的左,中,右键,分别返回1 .2 .3 event.which

更多event事件参见event事件文档

移除事件

unbind([type],[data])

第一个参数是事件类型,第二个参数是将要移除的函数,如果没有参数,则默认移除所有绑定事件

     $(function(){
        $('.btn').bind("click",fn1 = function(){
            //do something
        }).bind("click",fn2 = function(){
            // do something
        })
        $('.two').click(function(){
            $('.btn').unbind('click',fn1); //删除绑定事件1
        })
     })

如果需要只触发一次,随后立即解除绑定,可以使用one()

one(type,[data],fn);

该方法与bind等方法使用方法一样,one()绑定的事件会在执行第一次后,解除绑定

模拟操作

trigger(type,[data])

trigger可以模拟用户操作,可以触发内置事件.也可以用来触发自定义事件

     $(function(){
        $('.head').click(function(){
            $(this).next().toggle(500);
        })
        $('.head').trigger('click');
     }) 第二个参数为可选参数,传递需要传递的数据

    $(function(){
        $('.head').bind("myfn",function(event,message1,message2){
            $(this).next().append("<p>"+message1+message2+"</p>");
        })
        $('.head').trigger('myfn',["my","function"]);
    }) trigger也可以执行默认操作


$(this).trigger("focus");//让元素得到焦点

p121