写在前面的话,以手机浏览的朋友,因手机屏幕不是很宽,如果存在代码看不全的情况,所有的代码区是可以左右滑动的,当然,你也可以点击代码区右上角从左往右数的第二个按钮,让代码换行显示。
Jquery之所以那么流行,我觉得有几点:
一、良好的兼容性;
二、强大的选择器功能和dom操作;
三、异步队列处理,包括动画封装和ajax请求;
四、事件绑定机制,对于给动态添加到页面的元素绑定事件很有用。
以上四点,应该是一般的朋友用得最多的了,其实jquery除了这几点,还有很多强大的功能,只是我们很少用,不知道而已。这篇文章主要讲选择器,Jquery的选择器大体上可分为:基本选择器、层次选择器、过滤选择器、表单选择器。 过滤选择器又可以分为:简单过滤选择器、内容过滤选择器、可见性过滤选择器、属性过滤选择器、子元素过滤选择器、表单对象属性过滤选择器。下面一一列举。
首先,最常用的id,class,元素名选择器我就不再赘述了,相信任何一个会jquery的都会用。此处直接跳过。
1、层叠选择器: 即根据当前dom找与其存在某种位置关系的对应dom。
1 2 3 4 |
$("form input") 选择所有的form元素中的input元素; $("#main > *") 选择id值为main的所有的子元素 ; $("label + input") 选择所有的label元素的下一个input元素节点,返回的是label标签后面直接跟一个input标签的所有input标签元素 ; $("#prev ~ div") 同胞选择器,该选择器返回id为prev的标签元素的所有的属于同一个父元素的div标签; |
2、过滤选择器:即根据某一条件返回满足该条件或不满足该条件的相关dom。
基本过滤选择器,跟index索引位置相关的:
1 2 3 4 5 6 7 8 9 |
$("tr:first") 选择所有tr元素的第一个 ; $("tr:last") 选择所有tr元素的最后一个 ; $("tr:even") 选择所有的tr元素的第0,2,4... ...个元素(注意:因为所选择的多个元素时为数组,所以序号是从0开始) ; $("tr:odd") 选择所有的tr元素的第1,3,5... ...个元素 ; $("td:eq(2)") 选择所有的td元素中序号为2的那个td元素 ; $("td:gt(4)") 选择td元素中序号大于4的所有td元素 ; $("td:lt(4)") 选择td元素中序号小于4的所有的td元素 ; $("div span:first-child") 返回所有的div元素的第一个子节点的数组 ; $("div span:last-child") 返回所有的div元素的最后一个节点的数组 ; |
内容过滤选择器,针对包含内容或不包含内容的:
1 2 3 4 5 6 |
$("input:not(:checked)") 过滤掉:checked的选择器的所有的未选择的input元素 ; $("div button:only-child") 返回所有的div中只有唯一一个button节点的所有子节点的数组 ; $("div:contains('John')") 选择所有div中含有John文本的元素 ; $("div:empty") 选择所有的为空(也不包括文本节点)的div元素的数组 ; $("div:has(p)") 选择所有含有p标签的div元素 ; $("div:parent") 选择所有的以div为父节点的元素数组 ; |
可视化过滤选择器:
1 2 |
$("div:hidden") 选择所有的被hidden的div元素 ; $("div:visible") 选择所有的可视化的div元素 ; |
属性过滤选择器,专门针对元素的某一属性是否满足某一条件做选择:
1 2 3 4 5 6 7 |
$("div[id]") 选择所有含有id属性的div元素,本处只是为了举例说明,实际开发中建议直接用$("#id"); $("input[name='newsletter']") 选择所有的name属性等于'newsletter'的input元素 ; $("input[name!='newsletter']") 选择所有的name属性不等于'newsletter'的input元素 ; $("input[name^='news']") 选择所有的name属性以'news'开头的input元素 ; $("input[name$='news']") 选择所有的name属性以'news'结尾的input元素 ; $("input[name*='man']") 选择所有的name属性包含'news'的input元素 ; $("input[id][name$='man']") 可以使用多个属性进行联合选择,该选择器是得到所有的含有id属性并且那么属性以man结尾的元素 ; |
注:此处只是演示用例,并不是只有input元素才能使用,类似$(“a.className[href^=’http’]”),$(“span.className[title=’title’]”)的,都可以用。
表单元素选择器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$(":input") 选择所有的表单输入元素,包括input, textarea, select 和 button ; $(":text") 选择所有的text input元素 ; $(":password") 选择所有的password input元素 ; $(":radio") 选择所有的radio input元素 ; $(":checkbox") 选择所有的checkbox input元素 ; $(":submit") 选择所有的submit input元素 ; $(":image") 选择所有的image input元素 ; $(":reset") 选择所有的reset input元素 ; $(":button") 选择所有的button input元素 ; $(":file") 选择所有的file input元素 ; $(":hidden") 选择所有类型为hidden的input元素或表单的隐藏域 ; $(":enabled") 选择所有的可操作的表单元素 ; $(":disabled") 选择所有的不可操作的表单元素 ; $(":checked") 选择所有的被checked的表单元素 ; $("select option:selected") 选择所有的select 的子元素中被selected的元素; |
3、父子关系与兄弟关系。
1 2 3 4 5 6 7 |
$("#example").parent(),返回id为example元素的直接父元素; $("#example").parents(".exc"),返回id为example元素的祖先元素中样式名包含.exc的元素; $("#example").children(),返回id为example元素的所有直接子元素; 兄弟关系在做幻灯片切换的时候经常用。 $("#example").next(),返回和id为example的元素属于同一层级,且刚好位于其后面的元素; $("#example").prev(),返回和id为example的元素属于同一层级,且刚好位于其前面的元素; $("#example").siblings(),返回和id为example的元素属于同一层级的其他所有元素,即兄弟元素; |
上面所有事例只是针对性地指明用法,在实际开发中,我们不能就那么用,还用懂得选择器的优化,同时对于已选择过的元素,最好是定义缓存,而不是每次用到都重新选择,那样做是最不好的,原因很简单,虽然我们用jquery很方便就能做到,但在jquery内部,每一次选择操作都进行了大量的运算才得到最终返回结果。虽然随着现在的浏览器对原生选择的支持越来越好,jquery也在不断更新,但作为一名编程爱好者,代码规范很重要,内存开销的考虑更加重要。
前端水太深了,技术学都学不过来