jQuery参考实例 1.6 在当前选中的元素集中查找下级元素
原文:
http://www.lifelaf.com/blog/?p=204
本文翻译自jQuery Cookbook (O’Reilly 2009) 1.6 Finding Descendant Elements Within the Currently Selected Wrapper Set
需求在选中一个或几个元素后,需要在这些DOM元素范围内查找下级元素或子元素。
解决方案从当前几个元素及其下级元素中查找并创建新的元素集,可以用find()方法。比如,有一张包含多个文字段落(<p>)的网页,每个段落中会有一些文字是斜体的(<em>)。如果需要选择所有<p>段落中的<em>元素,可以这么做:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body> <p>Ut ad videntur facilisis <em>elit</em> cum. Nibh insitam erat facit<em>saepius</em> magna. Nam ex liber iriure et imperdiet. Et mirum erosiis te habent. </p> <p>Claram claritatem eu amet dignissim magna. Dignissim quam elit facer erosillum. Et qui ex esse <em>tincidunt</em> anteposuerit. Nulla nam odio iivulputate feugait.</p> <p>In quis <em>laoreet</em> te legunt euismod. Claritatem <em>consuetudium</em>wisi sit velit facilisi.</p> <script type="text/JavaScript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> <script type="text/JavaScript"> //警告框显示所有p元素中斜体文字的数目 alert('The three paragraphs in all contain ' + jQuery('p').find('em').length + ' italic words'); </script></body></html>
值得注意的是,上述代码可以直接用jQuery函数来重写,只需将<p>元素集作为上下文参数传给jQuery函数即可:
alert('The three paragraphs in all contain ' + jQuery('em',$('p')).length + ' italic words');
事实上,上面的两种方法一般仅作演示用。更实用也更符合逻辑的做法是使用CSS选择器表达式:
alert('The three paragraphs in all contain ' + jQuery('p em').length + ' italic words');讨论
jQuery的find()方法会根据调用该方法的DOM元素及其子元素来查找创建新的元素集。在实际使用中,find()函数很容易与filter()函数混淆。最简单的区分两者的方法是:find()针对的是当前元素集的下级元素或子元素,而filter()针对的是当前元素集本身。换而言之,如果想从当前元素集的下级元素或子元素中查找,find()方法比较合适;而如果想对当前元素集本身进行过滤来获取一个子集,那么filter()方法才是不二之选。更直白的说,find()方法返回的是子元素组成的集合,而filter()方法返回的是当前元素集经过过滤后的子集。