jq编程基础

jq是函数式编程,所以获取元素就有如下形式:

$("#id");相当于js中document.getElementById("id");因为jq中不需要=,所以本文之后用=代替"相当于js中"这句话.
$(".class")=document.getElementsByClassName("class");
$("tag")=document.getElementsByTagName("tag");

可以看出,jq作为js库相比后者在写法上大幅度简化了,所以jq比起js要简单得多,相当多.使用jq开发效率高很多,而且不存在浏览器兼容问题.这是因为jq其实是用js写的,jq源码在用js写的过程中实际上就包括了所有浏览器的兼容方案.
接下来继续介绍jq的语法;

$(function(){});=window.onload=function(){}
$($("tag").html());=document.getElementsByTagName("tag").innerHTML("");
$($("tag").find("#id/.class/tag"));=document.getElementsByTagName("tag").document.getElementsByTagName("tag")/document.getElementsByClassName("class")/document.getElementById("id");在节点下查找某元素.
index(),索引 表示在兄弟节点中的位置;
has(),包含  在节点内部查找某元素.
filter(),过滤  例子filter($("tag"));过滤名为tag的元素,即获取tag元素
not(),反过滤  和上面的相反.
next(),下一个兄弟节点
prev(),上一个兄弟节点
attr(),操作元素属性值,例子$("tag").attr("title","哈哈");把tag标签的title属性值改为哈哈.
eq() 下标 相当于数组里的下标
addClass()给节点添加class
removeClass()删除class
append()添加某节点为某节点最后一个子节点.例如$("tag").append("tag1");添加tag1为tag子节点的最后一个.
appendTo()把某节点添加为某节点最后一个子节点,例如$("tag").append("tag1");把tag添加为tag1子节点的最后一个.
注意:这里的append()和appendTo()操作的对象不同,前者操作括号里的节点,后者则相反操作该方法前面的节点.
prepend()和prependTo()同上,意为添加为子节点首位.
insertBefore()和before()也是,意为把某节点插入(剪切)到某节点之前
至于insetAfter()和after()同样,意为把某节点插入(剪切)到某节点之后
jq中对同一节点的一系列操作可以简化节点,直接在第一个节点后追加 例如;
$("tag").click(function(){});
$("tag").mouseover(function(){});
$("tag").mouseout(function(){});
可以简化为$("tag").click(function(){}).mouseover(function(){}).mouseout(function(){});
这个特点称之为jq的链式操作.
remove(),不需要参数,移除节点/变量

on(),添加事件 参数为事件,可多个参数.例如:
$("tag").on("click",function(){});  第一种 适用于单个事件一切场景
$("tag").on("click mouseover",function(){});第二种 适用于两种事件采用同一函数的场景
$("tag").on({click:function(){},mouseover:function(){}});第三种 适用于多个事件一切场景

off(),移除事件,参数为要移除的事件,不写默认移除所有事件
对事件进行操作,jq中是直接
$("div").click(function(ev){
     ev.pageX    ev就是事件对象,pageX和js中clientX作用相仿,不过不同的是前者相对于文档,后者相对于可视区域,Y同理      
});
ev对象有一些方法:
which:和js中keyCode一样,获取键盘值,不同的是,which连鼠标的值也可以获取
preventDefault(),阻止默认时间,stopPropagation(),阻止冒泡,return false;既阻止默认又阻止冒泡.one()事件只执行一次
scrollTop(),获取节点垂直滚动距离,left为水平距离
$("<div>div</div>")创建节点,相当于js中
document.creatElement("div");
document.getElementsByTagName("div").innerHTML("div");
可以说jq大幅度,简化了js的操作.

offset().left/top 获取元素到浏览器窗口的left值或top值
position() 把当前元素转化为类似定位的形式
offsetParent()获取定位的父级元素
parent()获取父级元素
val()获取元素value值
size()类似于js中的length
each(function(i,value){}),jq中的for循环,i代表下标,value代表每一个元素
hover(function(){},function(){})前一个鼠标移入,后一个鼠标移出
show()和hide(),jq的运动效果,同时改变width和height还有透明度. 显示和隐藏 参数为时间,单位毫秒
fadeIn()和fadeOut(),同上,只改变透明度 分别为淡入,淡出
fadeTo(1000,0.5),具体设置透明度,时间1秒,透明度0.5
slideDown()和slideUp无参数,分别为下拉,上拉 运动效果.

get(),把jq转化为js,例如$("#div1").get(0).innerHTML这样在同一行里就实现js和jq同时存在,需要注意参数为一个集合的下标,如果一个就写0,不写默认选中集合中所有元素.同时有一个简写用[i]可以代替get[i];
remove()和detach(),前者彻底删除节点,包括与事件的绑定关系(彻底删除,粉碎存在痕迹),而后者仅仅删除节点,保留其他东西(相当于回收站,可以恢复如初)
outerWidth获取任意元素的宽度,而js中offsetWidth获取不到隐藏元素的宽度例如display:none其他类似高度height也一样有区别
text(),获取或设置文本,类似html()但仅获取或设置文本

$(function(){});window.onload=function(){}的区别是,前者仅dom加载完就执行,后者需要全部页面加载完才执行,然而并不需要这样做,所以jq的性能更好,速度更快

parents(),获取元素祖先节点,参数为具体某一个节点,数目不限
closest(),获取最近的指定祖先节点,必须设置参数,因为只能找一个元素
siblings()获取所有兄弟节点,参数也是筛选节点
nextAll()获取下面所有兄弟节点,参数筛选
prevAll()上面兄弟节点,参数筛选
上述方法的All改为utill获取直到某节点停止,参数筛选
clone();在用append()等移动节点的操作时通常是剪切,但$(''#div1").clone().append("#div2")是复制不会改变原div2.如果加参数true,就连事件绑定关系等一切完美复制.
wrap();包装,$("#div1").wrap("#div2")即为在div2外面包一个div1
wrapAll();整体包装,包装一个集合,把all换inner为内部包装,正好相反,
unWrap();删除包装,但body不受此约束.

add(),并集 var oDiv=$("#div1").add("span")同时选定div1和span

slice()和数组用法相似
serialize(),将数组解析为字符串例如:

<input type="texe" name="a" value="1">
<input type="texe" name="b" value="2">
<input type="texe" name="c" value="3">
$('form').serialize(1);

即为a=1&b=2&c=3;

serializeArray()是转化为数组形式即:

[
    {name:"a",value:"1"},
    {name:"b",value:"2"},
    {name:"c",value:"3"}
]

animate()运动,类似js中的startMove,参数用json写 参数有四个:
1.参数用json格式即{width:300px,height:200px}
2.时间,上述例子后面没写时间,所以默认为400毫秒,,这是第二个参数animate({width:300px,height:200px},300)就设置300毫秒
3.运动形式,有两个默认为swing(慢快慢),linear(匀速).当然还有其他的需要进一步学习才能知道
4.回调函数:在运动结束时执行animate({width:300px,height:200px},300,swing,function(){});
stop(),默认阻止当前运动,参数true可以阻止后续运动,立即停止到当前运动指定目标点
finish()立即停止到所有运动指定目标点
delay(1000)延迟一秒钟

delegate(),事件委托 举例:

<ul>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>

如果给上述li节点绑定事件函数,一般的写法为$("li").on("click",fuction(){});利用事件冒泡出现了一个事件委托的方法:$("ul")delegate("li","click",function(){});和前者效果是一样的,但事件绑定在ul上,利于性能优化

阻止事件委托:undelegate();
trigger(),事件 主动/自动 触发
ev.data事件数据 例如$("li").on("click",{name:"hello"},function(){});其中,ev.data可以代表name:"hello"这个数据,而ev.data.name就代表hello.
ev.target获取事件源
ev.type事件类型

直到目前为止,我们学习的仅仅是$()也就是jquery对象下的方法,但是这个库最有用的其实是它的工具插件,先来讲讲工具吧
$其实就是jQuery的简写,$().css()这种只能给jq使用.但是$.xx()不仅能给jq用,甚至原生js也可以使用,所以$.xx()被称为工具方法
$.type()判断数据类型 类似js中的typeof但前者判断的数据类型更多,数据分类更具体,简单地说就是js写法的完美版
$.trim()去掉空格
$.inArray()类似indexof例子:
var arr=["a","b","c"];
$.inArray("a",arr);返回的值是一个数字,就是下标0,如果找一个数组里不存在的元素,那就返回-1.
$.proxy()改变this指向,例如

function show(n1,n2){
     $.proxy(show,document,1,2     )(3,4);这里就改变show的this指向为document,并且直接给出参数,也可以在后面跟括号给参数,也可以两者混用.
}

前面提到了$和jquery其实是一回事,但是$并不是jquery的专属简写,实际上很多库都使用了$作为简写.那么如何解决冲突呢?
noConflict()防止冲突,例如
var m=$.noConflict(); 那接下来m就可以替代$得作用了

parseJSON ()将字符串转为json格式
makeArray()将类数组转为真数组,什么是类数组呢?var m=$("div").$("li");这里m实际上就是类数组,因为li很可能有多个,但类数组是不能使用数组的方法的,所以用makeArray()转换为真数组,就可以使用数组的方法.
jquery的插件:
即便jquery已经如此强大,但有时候我们需要的效果jq并没能实现,所以通过插件可以补充jq
jq插件有两种,一种是工具插件,众所周知jq最负盛名的是它工具库的作用,当然插件也是其关键的一方面
$.extend(function(){}),这样设置就可以了
$.fn.extend(function(){})这种是第二种插件形式,即jq对象下的插件,两种插件因为调用的形式不同,一个是$().xx(),一个是$.xx(),所以可以存在同名插件的情况

关于jq的其他东西,直接去看中文文档就可以了 ,道理都是相似的

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

推荐阅读更多精彩内容

  • jQuery基础 什么是JQ?一个优秀的JS库,大型开发必备JQ的好处?一简化JS的复杂操作二不再需要关心兼容性三...
    幺七阅读 942评论 0 2
  • 通过jQuery,您可以选取(查询,query)HTML元素,并对它们执行“操作”(actions)。 jQuer...
    枇杷树8824阅读 654评论 0 3
  • 一.jQury的引入 jQuery的优势 轻量级 强大的选择器 出色的DOM操作 可靠的事件处理机制 完善的Aja...
    空谷悠阅读 528评论 0 2
  • 社群简单认为就是一个群,但是社群需要有一些它自己的表现形式。比如说我们可以看到社群它要有社交关系链,不仅只是拉一个...
    亮子老湿阅读 134评论 0 0
  • 讲台三尺地方, 老师一生奔忙。 青丝变成白发, 赢得满园芬芳。.
    天下有双_a7de阅读 355评论 0 4