jQuery适用技巧笔记整合

1、关于页面元素的引用

通过jquery的$()引用元素包括通过IDCLASS元素名以及元素的层级关系dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用dom定义的方法。


2、jQuery对象与dom对象的转换
  • 只有jquery对象才能使用jquery定义的方法。
  • 注意dom对象和jquery对象是有区别的,
  • 调用方法时要注意操作的是dom对象还是jquery对象。
  • 普通的dom对象一般可以通过$()转换成jquery对象。

如:$(document.getElementById("msg"))则为jquery对象,可以使用jquery的方法。

由于jquery对象本身是一个集合。如果jquery对象要转换为dom对象则必须取出其中的某一项,一般可通过索引取出。

如:$("#msg")[0]$("DIV").eq(1)[0]$("div").get()[1]$("td")[5]这些都是dom对象,可以使用dom中的方法,但不能再使用Jquery的方法。

以下几种写法都是正确的:
1.$("#msg").html();
2.$("#msg")[0].innerHTML;
3.$("#msg").eq(0)[0].innerHTML;
4.$("#msg").get(0).innerHTML;


3、如何获取jQuery集合的某一项

对于获取的元素集合,获取其中的某一项(通过索引指定)可以使用eqget(n)方法或者索引号获取.
要注意:

  • eq返回的是jquery对象,而get(n)和索引返回的是dom元素对象。
  • 对于jquery对象只能使用jquery的方法,而dom对象只能使用dom的方法,

如要获取第三个<div>元素的内容。有如下两种方法:

`$("div").eq(2).html();`   //调用jquery对象的方法
`$("div").get(2).innerHTML;` //调用dom的方法属性

4、同一函数实现set和get

Jquery中的很多方法都是如此,主要包括如下几个:

$("#msg").html();//返回id为msg的元素节点的HTML内容。
$("#msg").html("<b>new content</b>");//将“<b>new content</b>” 作为html串写入id为msg的元素节点内容中,页面显示B加粗的new content
$("#msg").text();//返回id为msg的元素节点的文本内容。
$("#msg").text("<b>new content</b>"); //将“<b>new content</b>” 作为普通文本串写入id为msg的元素节点内容中,页面显示<b>new content</b>
$("#msg").height();//返回id为msg的元素的高度
$("#msg").height("300"); //将id为msg的元素的CSS高度设为300
$("#msg").width(); //返回id为msg的元素的CSS宽度
$("#msg").width("300"); //将id为msg的元素的宽度设为300
$("input").val(""); //返回表单输入框的value值
$("input").val("test"); //将表单输入框的value值设为test
$("#msg").click(); //触发id为msg的元素的单击事件
$("#msg").click(fn); //为id为msg的元素单击事件添加函数

同样blur,focus,select,submit事件都可以有着两种调用方法


5、集合处理功能

对于jquery返回的集合内容无需我们自己循环遍历并对每个对象分别做处理,jquery已经为我们提供的很方便的方法进行集合的处理。
包括两种形式:

$("p").each(function(i){this.style.color=['#f00','#0f0','#00f'][ i ]})
//为索引分别为0,1,2的P元素分别设定不同的字体颜色。
$("tr").each(function(i){this.style.backgroundColor=['#ccc','#fff'][i%2]}) 
//实现表格的隔行换色效果
$("p").click(function(){alert($(this).html())})
//为每个p元素增加了click事件,单击某个p元素则弹出其内容

6、扩展我们需要的功能
$.extend({min: function(a, b){return a < b?a:b; },max: function(a, b){return a > b?a:b; } });
//为jquery扩展了min,max两个方法使用扩展的方法(通过`“$.方法名”`调用):alert("a=10,b=20,max="+$.max(10,20)+",min="+$.min(10,20));

7、支持方法的连写

所谓连写,即可以对一个jquery对象连续调用各种不同的方法。
例如:

$("p").click(function(){
        alert($(this).html())
    }
).mouseover(function(){
    alert('mouse over event')
}).each(function(i){
    this.style.color=['#f00','#0f0','#00f'][ i ]
});

8、操作元素的样式

主要包括以下几种方式:

$("#msg").css("background"); //返回元素的背景颜色
$("#msg").css("background","#ccc"); //设定元素CSS背景为灰色
$("#msg").height(300); $("#msg").width("200"); //设定WIDTH和HEIGHT
$("#msg").css({ color: "red", background: "blue" }); //以名值对的形式设定样式
$("#msg").addClass("select");  //为元素增加名称为SELECT的class
$("#msg").removeClass("select");  //删除元素名称为select的class
$("#msg").toggleClass("select");  //如果存在(不存在)就删除(添加)名称为select的class

9、完善的事件处理功能

Jquery已经为我们提供了各种事件处理方法,我们无需在html元素上直接写事件,而可以直接为通过jquery获取的对象添加事件。

$("#msg").click(function(){alert("good")});//为元素添加了单击事件
$("p").click(function(i){this.style.color=['#f00','#0f0','#00f'][ i ]})
//为三个不同的p元素单击事件分别设定不同的处理
jQuery中几个自定义的事件:
  • (1)、 hover(fn1,fn2):

一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法。当鼠标移动到一个匹配的元素上面时,会触发指定的第一个函数。当鼠标移出这个元素时,会触发指定的第二个函数。

$("tr").hover(function(){
    $(this).addClass("over");
},
function(){
    $(this).addClass("out"); 
});
//当鼠标放在HTML表格的某行上时将class置为over,离开时置为out。
  • (2)、 ready(fn):

当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。

$(document).ready(function(){
    alert("Load Success")
})
//页面加载完毕提示“Load Success”,相当于onload事件。与$(fn)等价
  • (3)、toggle(evenFn,oddFn): 每次点击时切换要调用的函数。

如果点击了一个匹配的元素,则触发指定的第一个函数,当再次点击同一元素时,则触发指定的第二个函数。随后的每次点击都重复对这两个函数的轮番调用。//每次点击时轮换添加和删除名为selected的class。

$("p").toggle(function(){ 
   $(this).addClass("selected"); 
},function(){ 
   $(this).removeClass("selected"); 
});
  • (4)、trigger(eventtype):在每一个匹配的元素上触发某类事件。
$("p").trigger("click");    //触发所有p元素的click事件
  • (5)、bind(eventtype,fn),unbind(eventtype):事件的绑定与反绑定从每一个匹配的元素中(添加)删除绑定的事件。
$("p").bind("click", function(){
  alert($(this).text());
});//为每个p元素添加单击事件
$("p").unbind(); //删除所有p元素上的所有事件
$("p").unbind("click") //删除所有p元素上的单击事件

10、几个实用特效功能

其中toggle()slidetoggle()方法提供了状态切换功能。
如:
toggle()方法包括了hide()show()方法。
slideToggle()方法包括了slideDown()slideUp()方法。


11、几个有用的jQuery方法

(1)、$.browser.浏览器类型:检测浏览器类型。

  • 有效参数:safari, opera, msie, mozilla。
  • 如检测是否ie:$.browser.isie,是ie浏览器则返回true。

(2)、$.each(obj, fn):通用的迭代函数。可用于近似地迭代对象和数组(代替循环)。

$.each( 
    [0,1,2], function(i, n){ 
        alert( "Item #" + i + ": " + n ); 
    }
);

等价于:

var tempArr=[0,1,2];
for(var i=0;i<tempArr.length;i++){
    alert("Item #"+i+": "+tempArr[ i ]);
}
  • 也可以处理json数据
$.each( 
    { name: "John", lang: "JS" }, 
    function(i, n){ 
        alert( "Name: " + i + ", Value: " + n ); 
    }
);

结果为:
Name:name, Value:
JohnName:lang, Value:JS

(3)、$.extend(target,prop1,propN):用一个或多个其他对象来扩展一个对象,返回这个被扩展的对象。这是jquery实现的继承方式。

$.extend(settings, options); 
//合并settings和options,并将合并结果返回settings中,相当于options继承setting并将继承结果保存在setting中。
var settings = $.extend({}, defaults, options);
//合并defaults和options,并将合并结果返回到setting中而不覆盖default内容。可以有多个参数(合并多项并返回)

(4)、$.map(array, fn):数组映射。把一个数组中的项目(处理转换后)保存到到另一个新数组中,并返回生成的新数组。

var tempArr=$.map( 
    [0,1,2], 
    function(i){ 
        return i + 4; 
    }
);
//tempArr内容为:[4,5,6]
var tempArr=$.map( 
    [0,1,2],
    function(i){ 
        return i > 0 ? i + 1 : null; 
    }
);
//tempArr内容为:[2,3]

(5)、$.merge(arr1,arr2):合并两个数组并删除其中重复的项目。

$.merge( [0,1,2], [2,3,4] ) //返回[0,1,2,3,4]

(6)、$.trim(str):删除字符串两端的空白字符。

$.trim("   hello, how are you? "); //返回"hello,how are you? "

12、解决自定义方法或其他类库与jQuery的冲突

很多时候我们自己定义了$(id)方法来获取一个元素,或者其他的一些js类库如prototype也都定义了$方法,如果同时把这些内容放在一起就会引起变量方法定义冲突,Jquery对此专门提供了方法用于解决此问题。
使用jquery中的jQuery.noConflict();方法即可把变量$的控制权让渡给第一个实现它的那个库或之前自定义的$方法。之后应用Jquery的时候只要将所有的$换成jQuery即可,如原来引用对象方法$("#msg")改为jQuery("#msg")。

jQuery.noConflict();
// 开始使用jQuery
jQuery("div p").hide();
// 使用其他库的 $() 
$("content").style.DISPLAY= 'none';

源于2016年底总结~
这些是三年前写的笔记,今天整理出来,希望能帮到同学们,有错误的地方望指出。
吾日三省吾身-冬初初三

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335