parent()和最近的parent()之间有所不同

时间:2016-01-20 17:21:05

标签: jquery

在依赖关系树中只有一个my_class类的情况下,我不太清楚差异:

$(this).parent().closest('.my_class').attr('id');

$(this).parents('.my_class').attr('id')

实际上有什么不同吗?

编辑:没有这个没有重复,因为我在依赖树中只有一个my_class的例子。我知道parent()只返回一个元素,当parents()返回匹配元素列表时,如果匹配过滤器,则nearest()可以返回“this”。

HTML示例:

<div class="agenda_relative">
    <div class="agenda_day" data-date="<?php echo $year."-".$m."-".$d; ?>">
            <div class="agenda_day_nr"><?php echo $d; ?></div>      
               <ul class="agenda_hour">
                    <?php foreach ($date->hours as $h): ?>
                        <li><?php echo $h; ?><p class='agenda_hour_input' data-hour="<?php echo $h; ?>" contenteditable="true"></p>

关于事件模糊,我想获取agenda_day div的数据('date')

我有工作解决方案,但我想知道上述两种方法之间是否存在差异

2 个答案:

答案 0 :(得分:1)

假设.my_class也不在当前元素上,您实际上只是想要:

$(this).closest('.my_class').attr('id');

其他两个获取不同数量的匹配元素(父级只获取直接parent元素,parents获取所有祖先,closest在第一次匹配时停止。

答案 1 :(得分:1)

  

实际上有什么不同吗?

不是id值,不是。

但是虽然他们得到了相同的结果,但他们做了不同的事情:

  • $(this).parent().closest(".my_class")构建三个jQuery对象,其中最后一个对象最多包含一个元素。

  • $(this).parents(".my_class")构建两个jQuery对象,其中最后一个可能包含多个元素,根据它们与this的接近程度顺序排列(第一个条目是最近的一)。当然,您已经说过您的方案中只能存在一个.my_class,所以在您的特定情况中,您最多只能获得一个元素。但在一般情况下,即使有嵌套的my_class元素,您仍然可以获得正确的id

在遍历发生的程度方面也存在差异:在第二种情况下,即使一旦找到了父级,jQuery仍会继续遍历祖先寻找更多的东西(因为虽然你知道没有任何更多的发现,jQuery没有,所以它继续前进和看起来)。在第一种情况下,它会停在它找到的第一个。