您的位置:首页 > Web前端 > JQuery

jquery学习笔记

2016-05-11 17:30 501 查看
1、jquery对象与DOM对象的区别与互换

利用jquery选择器选择出来的对象就是jquery对象

利用getElementsTagName或者getElementById获取的元素是Dom对象

Jquery对象只能使用jquery封装的方法,例如html(),attr(),css()...

DOM对象只能使用js方法,如checked

Jquery——>DOM
var str=$(“.class”)[0]

 

DOM——>jquery

var str=document.getElementById(“id”);

var $str=$str;

 

2、解决jquery与其他库的冲突

(1)让出$, jQuery.noConflict();

(2)创建一个快捷方式 var zch=jQuery.noConflict();

 

3、$(“.name”)获取的永远是对象,要判断一个对象是否存在下面的方法是不对的

If($(“.name”)){

//do something

}

应该通过获取对象的长度来判断:

If($(“.name”).length > 0){

//do something

}

或者转化为DOM对象

If($(“.name”)[0]){

//do something

}

 

4、js获取标签内部的标签时其实获取的是一个数组,要获取其中的一个应该以数组的方式获取

var
checkBtnNum=document.getElementById("check_btn_num");

var checkFont=checkBtnNum.getElementsByTagName("font")[0];

 

5、jquery选择器分为:

基本选择器:id,class,element,*,选择器组

层次选择器:$(“.divspan”), $(“.div > span”), $(“.div + next”), $(“.div ~ div”)[选取div之后的所有]

next()与nextAll()方法的使用

过滤选择器:

(1)基本过滤选择器:

:first, :last, :not(“.name”), :even, :odd, eq(index), :lt(index), :gt(index),:header, :animated, :focus 
【index从0开始】

(2)内容过滤::contain(text), :empty, :has, :parent

(3)可见性过滤::hidden, :visiable

(4)属性过滤:[],[=],[!=],[^=],[$=],[*=],[|=],[~=],[][][]

(5)子元素过滤: :nth-child(index), :first-child, :last-child, :only-child
【index从1开始】

(6)表单对象属性过滤::enable, :disable, :checked, :selected

表单选择器:
:表单类型。。。

 

6、jquery的转义字符是\\,js的转义字符是\

$("#a\\[\\]").css("color","red");

var jsId=document.getElementById("a\[\]")

 

 

基本选择器中的:first :last
和过滤选择器-子元素选择器中:first-child :last-child的区别

前者是获取一个元素,后者是获取一个集合

举例:

<ul class=”list”>

<li>Test1<li>

<li>aaaaa<li>

<li>bbbbb<li>

</ul>

<ul class=”list”>

<li>Test2<li>

<li>ccccc<li>

<li>ddddd<li>

</ul>

$(".list li:first").css("color","red");只有值为Text1变红

$(".listli:first-child").css("color","red");test1和test2都变红

 

 

filter()与find()的区别

filter()是针对选择器本身进行的过滤.$(“div”).filter(“.tt”)等价于$(“div.tt”)

find()是针对子元素进行的过滤. $(“div”).find(“.tt”)等价于$(“div .tt”)

 

:has(seletor):作用于自身,$(“div:has(p)”)—包含p标签的所有div

.has():作用于自身,貌似和:has()没啥区别

.filter():作用于自身,选取的结果是符合条件的自身元素

 

.find():作用于后代,选取的结果是后代元素

:contains(text):作用于自身,选取符合匹配文本条件的元素集合

 

.hasClass():判断,返回布尔值

.is():判断,返回布尔值

 

 

DOM是文档对象模型,是一种与浏览器、语言和平台无关的接口,利用它可以轻松获取页面中的元素。文档对象分为

DOM CORE:核心DOM,定义了一套标准的针对任何结构化文档的对象,包括HTML、XML和XHTML。

HTML DOM

CSS DOM

 

append()和appendTo()的区别

append()可以追加元素和字符串,appendTo()只能向选定的目标元素中追加自定义元素和移动页面上现有的元素。

<p>2222</p>

<div class="menu">111</div>

<script type="text/javascript">

$(function(){

$(“<b>自定义的元素</b>”) .appendTo('div');//把b标签追加到div内部后面

        
$('p').appendTo('div');//把“<p>2222</p>”移动到div内部后面,如果目标选择器有多个会移动之后再进行复制

});

</script>

 

 

 

 

 

删除元素节点的三个方法区别

remove([expr])   detach([expr])  empty()

1、 
remove和detach删除当前元素,empty清空子节点和文本

2、 
remove和detach都可以恢复删除掉的数据,但是detach可以恢复删除元素绑定的事件和数据

 

<div class="menu">

         
11

</div>

<br><br>

<buttonid="back">back</button>

<br><br>

<scripttype="text/javascript">

$(function(){

         
$('.menu').hover(function(){

                  
$(this).text('Google+');

         
});

         

         
//var x=$('.menu').detach();

         
varx=$('.menu').remove();

         

         
$('#back').click(function(event){

                  
$('body').append(x);

         
});

 

});

</script>

 

val()方法不仅可以设置元素的值,同时也可以获取元素的值,还可以使select,checkbox和radio相应的选项被选中。

 

<input type=” radio” value=”radio1”>

<input type=” radio” value=”radio2”>

$(‘:radio’).val([‘radio1’,’radio2’])

另一种方法:

$(‘:radio’).attr(‘checked’,true);

 

HTML中P标签内不可包含DIV标签

DTD中规定了块级元素是不能放在P里; P标签内包含块元素时,它会先结束自己。

 

 

各属性释义
screenX与Y
【全兼容】:是鼠标相对于整个屏幕左边(顶边)的坐标,基本与document脱节了。
clientX与Y【全兼容】:是鼠标相对于浏览器视口(滚动条之外的部分忽略掉)的坐标;

offsetX与Y【firefox不支持】:是鼠标相对于当前所指向对象的坐标,鼠标此时指向按钮,则offsetX是相对于这个按钮;
layerX与Y【firfox中必须要定位,ie78不支持】:是标准浏览器出的新属性,IE9也支持。他可以用来代替offsetX与Y.但是,他的定义为:相对于当前指向元素最近的有定位信息的元素的坐标。这个“有定位”是指有非默认定位的css属性(即非static)。

获取元素的位置将两者结合起来:

var x=e.layerX||e.offsetX;  
var y=e.layerY||e.offsetY; 

pageX与Y【IE7、8不支持】:是鼠标相对于整个页面左边(顶边)的坐标,包括视口之外的;

兼容性总结:
1,firefox不支持offsetX,offsetY与x,y属性,但完全可以用layerX代替他们;

2,ie中的x,y相当于firefox&chrome中的layerX与layerY;

3,ie7,8的document的边界与浏览器窗口的边界有2px的距离,所以在窗口最大化时screenX最小都有2px;

4,ie9中的layerX与Y,虽然有值,但却莫名其妙的不正确,貌似与html标签有关,不要在IE9中使用layerX.

 

兼容性总结:
标准浏览器中可以用position与event.layerX配合来实现event.offsetX属性;

IE7,8中没有pageX,pageY,只有用document.documentElement.scrollLeft+event.clientX来求出。
所以,IE中的x,y或者offsetX,offsetY可以去掉一个了。

 

预览效果:http://jo2.org/javascript-get-mouse-coordinates/

 

总结:

ScreenXY与clientXY没有问题

offsetXY和layerXY(需要定位)结合使用

pageXYIE78不支持,计算公式:PageY=clientY+scrollTop-clientTop;

 

window.onload=zch;与window.onload

window.onload也相当于一个触发事件,如果函数加了括号那就直接先执行函数,再加载body。而不加括号,则相当于将一个函数当作变量赋值到window.onload上,并不立即加载。

 

<script>

window.onload = doIt();

function doIt() {

var oDiv = document.getElementById("div1");

alert (oDiv);

}

<div id="div1"></div>

</script>结果为null

 

<script>

window.onload = doIt;

function doIt() {

var oDiv = document.getElementById("div1");

alert (oDiv);

}

</script>

<div id="div1"></div>

结果为[object HTMLDivElement]

以上代码都在heade之间

 

 

加载DOM

$(document).ready(function(){

})

简写形式:

$(function(){

})

事件绑定:bind,on

$(‘div’).on(‘click’,function(){

})

$(‘div’).unbind(‘click’);

合成事件:

hover()和toggle()——toggle方法1.9版本已经不支持了

事件冒泡:

由内到外依次触发

阻止方法:event.stopPropogation()

阻止标签默认行为:event.preventdefault()

阻止冒泡也可以改写为 return false;

事件捕获与冒泡正好相反,jquery不支持,需要些原生js

事件的属性有:

event.target——触发事件的元素,this是注册事件的元素

比如:

$(‘li’).click(function(event){

var el1=event.target.nodeName;//显示为b

var el2=this.nodeName;//显示为li

})

event.target与this是js dom对象,转换为jquery对象要这么写:$(event.target)、$(this)

event.relatedTarget

event.pageX和event.PageY

event.which

event.metaKey

 

移除事件

bind()——unbind()

on()——off()

delegate()——undelegate()

绑定事件时可以添加事件命名空间,删除的时候直接删除命名空间即可,比较方便。

示例:

$(‘ele’).bind(‘click.zch’,function({})

$(‘ele’).bind(‘dbclick.zch’,function({})

$(‘ele’).bind(‘mouseover.zch’,function({})

$(‘button’).click(function(){

$(‘ele’).unbind(‘.zch’)

})

模拟操作

trigger(),可以出发自定义的方法

 

动画

show()

hide()

fadeIn()

fadeOut()

停止动画:stop(clearQueue,goEnd)

判断动画是否在执行中

$(element).is(‘:animated’){}

自定义方法animate

多次触发除了用stop()函数清空动画队列之外还可以这么写:

$(element).animate({left:’+=50px’},{queue:false,duration:1000},function(){

//do something

})

 

表单中的checked和selected最好用prop()方法来获取,返回值为布尔值。

Trigger(‘blur’)可以触发为元素绑定的blur事件,也会触发浏览器默认的blur事件,单单想元素起作用可以使用triggerHandler(‘blur’)方法

 

三元运算:

$(this)[hasClassOn?'removeClass':'addClass']('on');

方便记忆:这不是jquery的三元运算,是js的三元运算,js中的属性都能使用[]来表示,方法也不例外,

如果理解: Object = {"name":"Hello"};

Object.name = Object["name"]

下面的就容易理解了:

$(this)[hasSelected?"removeClass":"addClass"]("selected");

等同于

$(this)["removeClass"]("selected") 或者 $(this)["addClass"]("selected")

其实也就是

$(this).removeClass("selected"); 或者 $(this).addClass("selected");

 

jQuery插件

插件分为三种:

1、 
封装对象方法的插件

2、 
封装全局函数的插件

3、选择器插件

理解第一种和第二种需要分清楚$.fn.extend()和$.extend()的区别

jQuery.fn.extend是用来给jQuery封装的对象添加功能的,而jQuery.extend是用于给jQuery对象本身添加功能的。

下面是两个插件代码:

$.fn.extend({
        showTagName:function(){
            var str="";
            for(var c=0; c<=this.length-1; c++){
                str += c + " : " + this[c].tagName + "\n";
            }
            alert(str);
        }
    });

 

$.extend({
        max:function(a,b){
            return a>b ? a:b;
        }
    });

 

对象方法插件($.fn.extend())这样使用:$(‘.name’).showTagName()

全局函数插件($.extend())这样使用:$.max(13,5)

 

其他注意事项:

1、闭包:

;(function($){

 
Var def = $.extend({

 
Name:””,

 
url:””

},def)

$.fn.myFunction= function(def){

 
return this.each(function(){

   
Var x = def.name;

 
  Console.log(x);

})

};

})(jQuery);

2、通过this.each()遍历对象

 

 

提高jquery的性能

(1)      尽量使用id选择器和标签选择器(因为直接调用本地方法)

(2)      缓存对象(如果某个选择器使用频繁最好复制给变量储存在缓存中,当然链式操作也可以)

(3)      循环语句中应该减少对于DOM的操作(比如将一个有100个数字的数组添加到ul中,最好先用循环创建100个li,然后再追加到ul中,这样就只有一个dom操作,如下程序)

(4)      循环数组尽量使用for循环

(5)      事件代理—给100li添加点击事件不如给父级ul添加点击事件,通过判断点击的元素进行处理,即获取e.target。jquery有on()方法

$(‘ul’).on(“click”,”li”,function(e){

  $(this).css("color",'red');

})



(6)      将数组追加到元素中可以使用join()方法

(7)      尽量使用原生的js方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: