标签:
jQuery1.x 最核心的组成部分就是:选择器引擎。它继承了 CSS 的语法,可以对 DOM 元素的标签名、属性名、状态等进行快速准确的选择,并且不必担心浏览器的兼容性。jQuery选择器实现了 CSS1~CSS3 的大部分规则之外,还实现了一些自定义的选择器,用于各种特殊状态的选择。
一.简单选择器
选择器 CSS 模式 jQuery 模式 描述
元素名 div {} $(‘div‘) 获取所有div 元素的DOM 对象
ID #box {} $(‘#box‘) 获取一个ID 为box元素的 DOM 对象
类(class) .box{} $(‘.box‘) 获取所有class为box的所有DOM对象
那么对于缺失不存在的元素,我们使用jQuery 调用的话,怎么去判断是否存在呢?因为本身返回的是jQuery 对象,可能会导致不存在元素存在与否,都会返回 true。
if ($(‘#pox‘).length > 0) { //判断元素包含数量即可
$(‘#pox‘).css(‘color‘, ‘red‘);
}
除了这种方式之外,还可以用转换为 DOM 对象的方式来判断,例如:if ($(‘#pox‘).get(0)) {} 或 if ($(‘#pox‘)[0]) {} //通过数组下标也可以获取 DOM 对象.
二.进阶选择器
在简单选择器中,我们了解了最基本的三种选择器:元素标签名、ID和类(class)。那么在基础选择器外,还有一些进阶和高级的选择器方便我们更精准的选择元素。
选择器 CSS模式 jQuery模式 描述
群组选择器 span,em,.box {} $(‘span,em,.box‘) 获取多个选择器的DOM 对象
后代选择器 ul li a {} $(‘ul li a‘) 获取追溯到的多个DOM 对象
通配选择器 * {} $(‘*‘) 获取所有元素标签的DOM 对象
还有一种前缀选择器,可以在ID和类(class)中指明元素前缀,比如:
$(‘div.box‘); //限定必须是.box元素获取必须是div
$(‘p#box div.side‘); //同上
类(class)有一个特殊的模式, 就是同一个DOM 节点可以声明多个类(class)。那么对于这种格式,有多个 class 选择器可以使用,但要注意和class 群组选择器的区别。
.box.pox { color:red; } //双 class 选择器,IE6 出现异常,其他的浏览器正常。$(‘.box.pox‘).css(‘color‘, ‘red‘); //兼容 IE6,解决了异常。
三.高级选择器
在前面我们学习六种最常规的选择器, 一般来说通过这六种选择器基本上可以解决所有DOM 节点对象选择的问题。但在很多特殊的元素上,比如父子关系的元素,兄弟关系的元
素,特殊属性的元素等等。在早期CSS 的使用上,由于IE6 等低版本浏览器不支持,所以这些高级选择器的使用也不具备普遍性,但随着jQuery 兼容,这些选择器的使用频率也越来越高。
选择器 CSS模式 jQuery 模式 描述
后代选择器 ul li a {} $(‘ul li a‘) 获取追溯到的多个 DOM 对象
子选择器 div > p {} $(‘div p‘) 只获取子类节点的多个 DOM 对象
next选择器 div + p {} $(‘div + p‘) 只获取某节点后一个同级DOM对象
nextAll选择器 div ~ p {} $(‘div ~ p‘) 获取某节点后面所有同级DOM对象
在高级选择器中, 除了后代选择器之外, 其他三种高级选择器是不支持IE6 的, 而jQuery却是兼容 IE6 的。
jQuery 为后代选择器提供了一个等价find()方法 ===> $(‘#box‘).find(‘p‘).css(‘color‘, ‘red‘); //和后代选择器等价
jQuery 为子选择器提供了一个等价 children()方法 ===> $(‘#box‘).children(‘p‘).css(‘color‘, ‘red‘); //和子选择器等价
jQuery 为next选择器提供了一个等价的方法next() ===> $(‘#box‘).next(‘p‘).css(‘color‘, ‘red‘); //和 next选择器等价
jQuery 为nextAll选择器提供了一个等价的方法 nextAll() ===> $(‘#box‘).nextAll(‘p‘).css(‘color‘, ‘red‘); //和 nextAll选择器等价
注意:层次选择器对节点的层次都是有要求的,比如子选择器,只有子节点才可以被选择到,孙子节点和重孙子节点都无法选择到。next和nextAll选择器,必须是同一个层次的后一个和后 N个,不在同一个层次就无法选取到了。
在find()、next()、nextAll()和 children()这四个方法中,如果不传递参数,就相当于传递了“*” ,即任何节点,我们不建议这么做,不但影响性能,而且由于精准度不佳可能在复杂的HTML 结构时产生怪异的结果。
标签:
原文地址:http://www.cnblogs.com/codc-5117/p/4563248.html