jQuery

jQuery:

它是一个使用原生的JS来封装的常用方法的类库(解决了浏览器的兼容问题)
jQuery非常强大的地方在于它的链式写法(执行完成一个方法后返回的结果依然是一个jQuery对象,这样就可以继续的调用下一个方法就行了)

$box.css("backfround","lightblue").width();  //可以,因为.css之后仍是jQuery对象
$box.css("background","lightblue").width().position();  //报错,因为.width之后是数字,不是jQuery对象,不能再执行position

jQuery中提供的常用方法

核心:

window.jQuery=window.$=jQuery(jQuery就是闭包中的私有函数)

var jQuery=function(selector,context){
      return new jQuery.fn.init(selector,context);
//可以把这个理解为返回的是一个jQuery类的实例
};
jQuery.fn=jQuery.prototype={
      constructor:jQuery
};
jQuery.extend=jQuery.fn.extend=function(){
      jQuery.extend;  //把它当作一个普通的对象,在对象中增加了extend方法
      jQuery,fn.extend;  //在它的原型上也增加了一个extend方法
}

selector:[string]选择器的类型 [object]JS原生的对象(把原生的对象转换为jQuery对象) [function]回调函数(等价于我们的$(document).ready...)
context:document(传递的是一个原生JS对象能够上下文,如果是一个jQuery对象,它默认为会把其重构为选择器)
jQuery选择器:创建jQuery这个类的一个实例(jQuery对象)
在jQuery这个类的原型上定义了很多的属性和方法,而通过选择器获取的每一个实例都可以调用这些方法:属性、CSS、文档操作、筛选、动画、事件...eg:$("*").css();
**把jQuery当做一个普通的对象,在它自己的属性上增加了一些常用的方法:Ajax、工具...eg
:$.ajax
extend:扩展,向jQuery这个类库中增加一些其他常用的方法
(1)向jQuery属性名上扩展(把它当作一个对象),-->作用:完善类库,给类库增加核心的方法

jQuery.extend({
      aa:function(){
            console.log("aa");
      }
});
$.aa();  //--->aa

(2)向jQuery原型上扩展(把它当作一个类)--->作用:编写一些基于jQuery插件

jQuery.fn.extend({
      bb:function(){
            console.log("bb");
      }
});
$().bb(); //-->bb

选择器:

通过传递对应规则的内容(ID、标签名、样式类名....),获取到页面中指定的元素/元素集合
var $oDiv=jQuery("#div1"); //--->$oDiv=$("#div1") -->$===jQuery

1-->jQuery选择器获取到的结果是一个jQuery对象,可以使用jQuery中提供的那些属性和方法,但不能直接的使用浏览器内置的属性和方法(如clientWidth,getAttribute等)

2--->关于原生JS对象和jQuery对象之间的转换
原生转变为jQuery:$(原生JS对象),如$(oDiv)
jQuery转变为原生:直接通过索引获取对应的元素即可
$oDiv[0]===$oDiv.get(0) 都是通过索引来获取指定位置的元素对象(JS原生对象)

属性:(常用)

1、jQUery的回调函数

var $call=$.Callbacks();  //-->创建一个回调函数的列表集合
$call.add(fn1);  //-->向集合中增加一个叫做fn1的函数
$call.fire(100);  //-->触发fire方法的时候,把回调函数集合中的方法执行,并且把对应的参数值传递给对应的方法-->“fn1:100”;
$call.remove(fn1);  //-->在集合中移除fn1这个方法

2、$(document).ready(function(){}); <===> $(function(){});和原生JS中的window.onload对应
window.onload的意思是:当页面中的HTML结构、图片、文字等所有资源都加载完成后才会触发这个行为,并且在一个页面中它只能执行一次,后面编写的会把前面的覆盖掉
$(document).ready(function(){});:只要HTML结构加载完成就会触发对应的行为,而且在一个页面中可以使用多次

3、属性(常用)
--->attr:获取和设置元素的自定义属性,等价于原生JS中的set/getAttribute
$("#div1").attr("haha"); //获取自定义属性haha
$(#div1").attr("haha",100); //设置自定义属性haha的值
$("#div1").attr({ index:1, name:"haha" }); //批量设置自定义属性
$("#div1").removeAttr("haha"); //移除haha这个自定义属性
--->prop:获取和设置元素的属性(和attr是不同的两套方式,两者之间不能相互混用:用attr设置的只能用attr删除或修改或获取,同理用prop设置的,也只能用prop操作)
prop内置的属性可以在HTML结构中体现出来,但是不是内置的属性是体现不出来的(但可以获取到值)
attr与prop的区别:attr一般都是用来设置和操作元素的自定义属性的,而prop一般是用来操作元素的内置属性的(尤其是表单元素的操作,大部分都在使用prop)

4、关于jQuery内置遍历机制和手动循环的方法
--->addClass/removeClass/toggleClass(toggle系列都是之前有就是移除,没有就是新增):通过jQuery选择器获取到一个集合,然后让集合直接调用jQuery中提供的方法,相当于给集合中的每一个元素都调取了对应的方法(jQuery内置循环操作)
eg:$DivList.addClass("w1"); //给所有div都添加了w1类,不用循环操作了

each:可以遍历jQuery集合中的每一项(和数组的forEach类似)

$DivList.each(function(index,item){
  //this->就是我们当前遍历的这一项的内容:item
  $(this).addClass("w1");
});

jQuery(selector,context) context一般不需要传递,默认是document,但也可以指定具体的上下文来获取元素

筛选:

1、eq(index)、first() 、last()、hasClass(strClass)(检测当前的元素中是否包含某一个样式类名,有则为true)
2、filter、children、find:常用的三个筛选方法
filter:同级过滤,首先通过选择器获取一个集合,在获取的内容中再进行二次筛选
$("*",$box).filter(); //什么都没有,所以必须filter中得写东西
children:子集过滤
find:后代过滤,$box.find(); //-->结果是个空集合 ,find中也必须写东西
-->jQuery这个元素对象的私有属性中叫做selector这个属性存储的值是当前本次查找的选择器的内容;context是当前本次查找的上下文

$("*",$box)  //-->context:document  selector:"#box *"
$("*",document.getElementById("box")  //--->context:div#box  selector:"*"

3、map:遍历jQuery集合中的每一项,并且可以支持返回值把每一项进行修改,类似于数组中的map方法
4、parent:父亲节点
5、parents:所有的父亲节点(从当前开始一直找到HTML,把每一项都记录下来)
6、next、nextAll、siblings、prev、prevAll等

CSS:

1、css:获取或者设置(批量设置)当前元素的样式值

var $box=$("#box");
$box.css("width");  //一个参数是获取
$box.css({  //批量设置
    background:"red";
    opacity:0.5;
});

2、offset:不管父级参照物是谁,获取当前元素距离BODY的偏移距离(top/left);而position:获取当前元素距离父级参照物的偏移(top/left)
3、scrollTop/scrollLeft:获取或设置元素的卷去高度/宽度
4、width/height:获取或设置元素的width/height
5、innerWidth/innerHeight:获取或设置元素可视区域的宽高(获取的时候等价于clientWidth/clientHeight),设置的时候保留padding的值,把width的值进行改变(width的值最小是0)
$box.innerWidth(true); //加true是指默认加上margin的值
6、outerWidth/outerHeight:获取或设置元素可视区域的宽高(包含边框);设置具体的值的时候和上面的效果一样

文档处理:

1、append:向指定元素的末尾位置追加一个新的元素 容器.append(元素)
appendTo:元素.appendTo(容器)
2、prepend/prependTo:向指定元素的开头位置追加一个新的元素
3、after/before:在当前元素的后面/前面追加新的元素
4、insertAfter/insertBefore:把选择器获取到的元素追加到指定元素的前面或者后面

var oDiv=document.createElement("div");
oDiv.id="div5";
$(oDiv).insertAfter($box);  //-->把创建的oDiv追加到$box的后面,和$box是同级的

5、replaceAll(selector):用匹配的结果替换所有selector匹配的元素

var oDiv=document.createElement("div");
oDiv.id="div5";
$(oDiv).replaceAll("ul");  //页面中所有的ul都用oDiv给替换了

6、remove:把匹配的结果在页面中移除掉
$box.remove(); //把box移除掉

事件:

同一个事件同一个元素可以绑定多个方法

var $box=$("#box");
$box.on("click",function(){
    console.log(1);   //-->this:当前元素(JS原生对象)  $(this):jQuery对象
});
$box.on("click",function(){
    console.log(2);
});

效果(动画):

1、animate():用于创建自定义动画的函数。参数有四个,分别是目标(最终)元素的属性值,运动总时长,运动方式(效果:如匀速/非匀速等),运动完成后执行的回调函数。
$("#box").animate({left:xxx,top:xxx,...},duration,"linear/swing",function(){});
2、stop:结束之前正在运行的动画,开启一个新的动画(结束上一个动画,下一个动画紧接着当前位置开始运动的),让上一个动画停止
$("#box").stop().animate({},1000,function(){});
3、delay:延迟
4、finish:直接让上一个动画完成(结束上一个动画,并且让元素快速的到达目标位置,再开始下一个动画)
5、fadeIn(淡入)、fadeOut(淡出)、fadeToggle
6、show(显示)、hide(隐藏)、toggle
7、slideUp(折起)、slideDown(展开)、slideToggle

Ajax:

$.ajax({
      url:"json/test.txt?_="+Math.random(),
      type:"get",
      dataType:"json",  //-->支持"text"、"html"、"jsonp".....
      success:function(data){
            console.log(data);
      }
});

工具:

1、each:jQuery中有两个each,(也有两个map,和each原理一样,只是可以支持返回值)一个是:循环选择器获取得到的jQuery集合中的每一项

$("div").each(function(index,item){
      console.log(item);
});

另一个是:循环数组、类数组、对象中的每一项

$.each([12,23,34],function(index,item){
       console.log(item);
});
$.each(document.getElementsByTagName("*"),function(index,item){
        console.log(item);
});
$.each({name:"gaoqi",age:24},function(index,item){
        console.log(item);
});

2、$.makeArray===>listToArray将类数组对象转换为数组对象

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

推荐阅读更多精彩内容

  • 原文链接 http://blog.poetries.top/2016/10/20/review-jQuery 关注...
    程序员poetry阅读 16,630评论 18 503
  • 一、样式篇 第1章 初识jQuery (1)环境搭建 进入官方网站获取最新的版本 http://jquery.co...
    凛0_0阅读 3,342评论 0 44
  • jQuery基础(一)——样式篇 1-2环境搭建 1-3 jQuery HelloWorld体验 $(docume...
    croyance0601阅读 1,072评论 0 8
  • 第一章 jQuery简介 1-1 jQuery简介 1.简介 2.优势 3.特性与工具方法 1-2 环境搭建 进入...
    mo默22阅读 1,568评论 0 11
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,314评论 0 2