06-讨论
2.1.3 讨论
区分子元素和后代元素很重要。后代(descendant)是存在于另一个元素中的任何元素,而子元素是直接后代;用父母和子女的类推对此很有帮助,因为DOM的层次结构大体与此类似。
值得注意的是,像 >
这样的组合符在使用的时候,如果已经指定了上下文,左边的表达式可以省略:
jQuery('> p', '#content');
//本质上和jQuery('#content > p')一样
在更为编程化的环境中,选择子元素应该用jQuery的 children()
方法完成,在该方法中可以用一个选择器过滤返回的元素。下面的代码选择 #content
元素的所有直接子元素:
jQuery('#content').children();
上述代码基本上和 jQuery('#content > *')
相同,但是有一个重要的差异;它运行的速度更快。jQuery不解析选择器,而是立即知道目的。但是,运行得更快这一差异并没有什么实用性。而且,速度的差别取决于浏览器和选择的内容,在某些情况下,这种差别几乎无法察觉。当处理存储在变量中的jQuery对象时, children()
方法特别有用。例如:
var anchors = jQuery('a');
// 获取所有锚元素的直接子元素可以用三种方式实现:
// #1
anchors.children();
// #2
jQuery('> *', anchors);
// #3
anchors.find('> *');
实际上,还有一种实现方式!在这种情况下,第一种方法最快。前面已经提到,可以向 children()
方法传递一个选择器表达式以过滤结果:
jQuery('#content').children('p');
只有作为 #content
直接子元素的段落元素才会返回。