find():返回匹配元素集合中每个元素的后代。参数:必选的,可以为字符串,jq对象或DOM元素。(字符串是指用于查找的表达式) children():返回匹配元素集合中每个元素的子元素。参数:可选的,字符串值,用以过滤子元素的表达式。 例子:
<table>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td>5</td>
<td>6</td>
</tr>
</table>
$('tr').children("td:first"):表达式先找到所有tr下的所有td,然后将他们形成一个元素集合,然后在找到第一个td,所以结果只有一个 $('tr').find("td:first"):表达式先遍历了所有的tr,再在每个tr中找到第一个td,所以结果为四个td。 如果写成如下: $('tr').children("td").first() $('tr').find("td").first() 这两种表达式得到的结果都是1个td 为什么find没有先遍历每个tr,再找到每个tr中 的第一个? 这是因为在jq中,当第一个方法执行完以后都会将结果放在一个结果集中,first()是执行一个结果集,所以为第一个 例子:
<table>
<tbody>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td>5</td>
<td>6</td>
</tr>
</tbody>
</table>
要求:获取第二个tr中的第一个td: $('table tbody").find('tr:eq(1) td:eq(0)') ,这个表达式的结果是正确的 但是$('table tbody").children('tr:eq(1) td:eq(0)')得到的是null; 原因: $('table tbody").children('tr:eq(1) td:eq(0)'):先是找到tbody先是过去的两个tr,但是这时候获取的tr不包括他们的子元素,所以按着上面的获取不到值。 如果要使用children进行获取值,可以按着如下进行操作: $("#tb>tbody").children("tr:last").children("td:eq(1)");
|