在依赖关系树中只有一个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')
我有工作解决方案,但我想知道上述两种方法之间是否存在差异
答案 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没有,所以它继续前进和看起来)。在第一种情况下,它会停在它找到的第一个。