2016-01-22 58 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而導致您未定義。它並不存在。