A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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)");


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马