本节书摘来自异步社区《jQuery Cookbook中文版》一书中的第1章,第1.6节,作者:【美】jQuery社区专家组 译者:姚军 , 孙博更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.6 查找当前选择包装器集中的后代元素
1.6.1 问题
你选择了一组(或者一个)DOM元素,希望在当前选中元素的上下文中找到后代(子)元素。
1.6.2 解决方案
使用.find()方法,根据当前集合及其后代的上下文创建一个新的元素包装器集。例如,假设你有一个包含多个段落的网页,这些段落中封装的是需要强调(以斜体显示)的单词。如果你只想选择
元素中包含的元素,可以使用如下代码:
<!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 eros
iis te habent. </p>
<p>Claram claritatem eu amet dignissim magna. Dignissim quam elit facer eros
illum. Et qui ex esse <em>tincidunt</em> anteposuerit. Nulla nam odio ii
vulputate 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 elements');
</script>
</body>
</html>
记住,也可以改写上述代码,将上下文引用作为jQuery函数的第二个参数:
alert('The three paragraphs in all contain ' + jQuery('em',$('p')).length +
' italic elements');
此外,值得一提的是,最后这两个代码示例只是为了说明的目的而编写的。使用CSS选择器表达式选择包含在元素(祖先)中的斜体元素(后代)即使不实用,也是更符合逻辑的。
alert('The three paragraphs in all contain ' + jQuery('p em').length +
' italic elements');
**1.6.3 讨论
**
jQuery .find()方法可以用于根据当前DOM元素集及其子元素的上下文创建新的元素集。人们往往混淆filter()和.find()方法的用法。记住两者差异的最简手段是记住.find()将操作/选择当前集合的子元素,而.filter()只操作当前元素集。换句话说,如果你想将当前包装器集当作上下文,进一步选择集合中元素的子元素,从而改变当前的包装器集,就应该使用.find()。如果你只想过滤当前包装集,获得集合中当前DOM元素的一个新子集,则使用.filter()。归纳起来就是:find()返回子元素,而filter()只过滤当前包装集里的元素。