2016-01-22 59 views
4

的元素,我有以下li元素:过滤使用jQuery

<li> 
    <span><img src="../media/check.svg" class="complete"></span> 
    <span><img src="../media/modify.svg" class="modify"></span> 
    <span><img src="../media/delete.png" class="delete"></span> 
    <span class="dutyText">hello</span> 
<li> 

当图像被点击(check.svg | modify.svg | delete.png),我想要得到的最后一个span元素上面的列表。

不幸的是,用下面的代码,我得到了一个未定义:

console.log($(this).closest('li').filter('.dutyText').html()); 

,我有以下问题:

  1. 我如何可以使用jQuery的最后一个元素?
  2. 反正有使用过滤功能,如果不是为什么?
  3. 为什么我得到undefined?

回答

5
  1. 如何使用jQuery获取最后一个元素?

    您可以在jQuery的收集

  2. 使用:last选择或last()方法反正是有使用过滤功能,如果没有,为什么?

    您可以按如下方式使用filter()。但是,在这种情况下,您不需要过滤器。

    $(this).closest('li').children().filter('.dummyText') 
    
  3. 为什么我得到了一个未定义?

    $(this).closest('li').filter('.dutyText')将搜索最近的祖先<li>,并会尝试从它那里得到的有lidummyText类。由于最接近的li没有类dummyText,选择器将不会选择任何元素,因此在空对象上调用html()返回undefined

假设有只有一个元素与类dummyText

  1. 由于元素是img的兄弟姐妹,你可以使用siblings()

    $(this).siblings('.dutyText') 
    
  2. 您还可以使用父子层次

    $(this).closest('li').find('.dutyText') 
    

多个元素为dummyText

  1. 您可以使用:last选择来获得最后一个元素。

    $(this).closest('li').find('.dutyText:last') 
    
  2. 您可以使用last()方法

    $(this).closest('li').find('.dutyText').last() 
    
+0

欢迎@lampropoi。如果您认为这回答了问题,并且是最佳答案,请接受答案。请参阅[如何接受答案?](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) – Tushar

1

1:当你想从一个集合使用.last()最后一个元素。

2:filter()旨在过滤JQuery元素的集合。在你的情况下,你想选择更深的一个深度(儿童)。所以你需要做find()

3:因为您试图从li中获得HTML .dutyText而导致您未定义。它并不存在。