jq中find()和children()的区别

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

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值