2015-06-18 63 views
0

有沒有比循環遍歷所有div更有效的方法,並檢查寬度以找到寬度> 0的最後一個div?jQuery - 獲取寬度> 0的最後一個div

這裏是我要去我通過,我得到這個使用這個電話的AB例如:

// My Call 
$(".pct-slider#tuesdaySlider").find(".color-region") 

// Example result of above call 
[<div class="color-region" style="width: 1;"></div>, 
<div class="color-region" style="width: 2;"></div> 
<div class="color-region" style="width: 3;"></div> 
<div class="color-region" style="width: 4;"></div> 
<div class="color-region" style="width: 0;"></div> 
<div class="color-region" style="width: 0;"></div>] 

循環我會找到寬度4.第4格有什麼我可以改變/添加到我的$(「.pct-slider#tuesdaySlider」).find(「.color-region」)調用來獲取最後一個div的寬度> 0的1行或者沒有循環?

回答

1

您可以使用.filter()以減少集

.filter(function(){ return $(this).width() > 0; }) 

的元素,然後.last()獲得該組中的最後一個元素。

整個代碼看起來是這樣的:

$(".pct-slider#tuesdaySlider").find(".color-region").filter(function(){ return $(this).width() > 0; }).last() 
+0

這就是我所需要的。謝謝 –

1

您可以使用:last

$(".color-region:last").width() 

這將返回其具有類名color-region

編輯

var lastDiv = $(".color-region").filter(function() { 
    return $(this).width > 0 
}).last(); 
+0

這給最後一個div ..不與寬度> 0 –

+0

因爲它給出了最後一個div的寬度。這不會工作的最後一個div。 – Varun

+0

@varun誤解了這個問題。看編輯 –

2

我能想到的最好的開始最後一個元素向後。所以

var reversed = 
      $(".pct-slider#tuesdaySlider").find(".color-region").get().reverse(); 

    $(reversed).each(function() { 
     if ($(this).width() > 0) { 
      .... 
     } 
    }); 

更新

如果您HTML總是喜歡

<div class="color-region" style="width: 0;"></div> 
<div class="color-region" style="width: 0;"> 

你可以做

$(".pct-slider#tuesdaySlider") 
     .find('.color-region:not([style="width: 0;"]):last') 

這種方法使用:not():last。但是,我告誡你,這種方法比前者不夠穩健。

2
$(".pct-slider#tuesdaySlider").find(".color-region").not(function() { return !$(this).width(); }).last();