2012-04-18 152 views
-2

我在我的代碼中有一些div,我想循環他們檢查實際與最後一個。each()和prev()可以一起使用嗎?

爲什麼這不起作用?

<div class="tarefa">1</div> 
<div class="tarefa">2</div> 
<div class="tarefa">3</div> 

<script> 
    $(function() { 

     i = 0 ; 
     $('.tarefa').each(function(index) { 
      i++; 
      if($(this).css("left") == $(this).prev('.tarefa').css("left")){ 
       alert(i); 
      } 
     }); 
    }); 
</script> 

$(this).prev('.tarefa').css("left")始終未定義。

+0

的' '.tarefa''必須是'$彼此直接的兄弟姐妹(本).prev(' tarefa'。)'工作。 – 2012-04-18 17:50:49

+0

向我們顯示標記。最初的想法......'prev()'不是指'each()'循環的前一次迭代。相反,它指的是位於DOM中的$(this)之前的元素。 – 2012-04-18 17:51:52

+0

答案是**是**,他們可以一起使用(爲什麼他們不應該?)。它可能並不總是有意義,但不是你需要什麼... – 2012-04-18 17:55:03

回答

2

如果你已經包含了你的HTML,那麼我們可以直接得到更多的答案。我發現你的代碼有兩個潛在的問題。

1)比較.each()中的第一項時,可能不會有.prev(),因此您在空的jQuery對象上請求.css("left")。那最好是沒有定義的,這可能會失敗平等測試,但通常不是一個好主意。 2)如果你所有的.tarefa對象不是沒有中介對象的直接兄弟姐妹,那麼$(this).prev('.tarefa')沒有達到你所期望的。

如果您檢查jQuery doc for .prev()它只有在與該類匹配時纔會獲得之前的兄弟姐妹。它沒有得到你的jQuery對象中的前一項,所以如果你的.tarefa對象不是彼此的直接兄弟,你的代碼將不能按需要工作。

您可以修復你的代碼對這個版本兩個問題:

$(function() { 

    i = 0 ; 
    var items = $('.tarefa'); 
    items.each(function(index) { 
     i++; 
     if(index > 0 && $(this).css("left") == items.eq(index-1).css("left")){ 
      alert(i); 
     } 
    }); 
}); 

編輯後來:

隨着你把你的評論的HTML,你原來的代碼將實際工作。通過.each()的第一次傳遞會獲得.prev()CSS值的未定義值,但它會適當地使比較失敗,並且您的原始代碼將實際工作。我不會推薦它,因爲這是一種更安全的方法,並且可能執行得更好一些。

+0

我的代碼如下:

1
2
3
與樣式。我沒有得到你的答案。 – 2012-04-18 17:54:27

+0

工作完美!謝謝! – 2012-04-18 17:58:39

+0

@ErickEngelhardt:請編輯您的問題以包含HTML標記。鑑於你提供的標記,你的代碼應該工作。 – 2012-04-18 17:58:51

0

第一次循環運行,當this是指與類tarefa DOM中的第一要素,沒有與tarefa類沒有以前的元素 - 這樣.prev('.tarefa')不會選擇任何內容。

+0

爲什麼downvote,我不是嗎?還有其他問題,正如其他答案所指出的那樣。 – 2012-04-18 17:53:47

+0

但爲什麼secund運行?只有第二個。 – 2012-04-18 17:56:48

+0

@ErickEngelhardt在不知道DOM是什麼樣子的情況下很難說清楚,但從理論上講,除第一個之外的所有內容都應該運行。 – 2012-04-18 18:00:20

0

你應該能夠一起使用它們。這個例子的工作原理:

<script type="text/javascript"> 
    ​$(function(){ 
     $(".test").each(function(index){ 
      if (index){ 
       alert($(this).prev().text()); 
      }    
     });   
    });​ 
</script> 
​<div class="test" style="background-color:yellow;">Test 1</div> 
<div class="test" style="background-color:blue;">Test 2</div> 
<div class="test" style="background-color:green;">Test 3</div>​ 

這裏的jsFiddle

相關問題