2011-10-03 79 views
0

我想設置一個使用jQuery的過濾器。我會有一定數量的div,每個都有一個數值(比方說價格)。jquery過濾器顯示不穩定的結果

下面的代碼正常工作,直到您輸入的值小於10爲止。然後您將得到的結果不應該在那裏。 (例如輸入4)

修復此問題的任何幫助將非常棒!謝謝!

http://jsfiddle.net/SUWxn/

<script> 
function sortmebaby() 
{ 
    var divList = $('#containerMonkey div[id^="monkey_"]'); 

$.each(divList, function(index, value) 
{ 
    console.log($(value).attr('xprice')); 
    if ($(value).attr('xprice') > $('#mankipower').val()) 
     $(value).hide(); 
    else 
     $(value).show(); 
    //alert(index + ': ' + value); 
}); 

} 
</script> 

<div id="containerMonkey"> 
    <div id="monkey_1" xprice="10">10</div> 
    <div id="monkey_2" xprice="20">20</div> 
    <div id="monkey_3" xprice="30">30</div> 
    <div id="monkey_4" xprice="40">40</div> 
    <div id="monkey_5" xprice="50">50</div> 
</div> 
<input type="text" name="mankipower" id="mankipower"> 
<input type="button" value="PUSH" onclick="sortmebaby()"> 

謝謝!

回答

1

您的if語句中的條件是比較字符串,而不是您所期望的。您可以使用parseInt的字符串轉換爲數字:

var val1 = parseInt($(value).attr('xprice'), 10), 
    val2 = parseInt($('#mankipower').val(), 10); 
if(val1 > val2) 
    $(value).hide(); 
else 
    $(value).show(); 

這裏是一個updated example

+0

此外,我會緩存$(價值),而不是一遍又一遍地重新選擇它。當你「隱藏」元素時,它仍然在DOM中。使用.remove()來逐字刪除它。 –

+0

同意,緩存'價值'將是一個好主意。至於你的其他建議,這些元素可以隱藏並再次顯示,所以'hide'在這種情況下更好,除非你想每次重新創建元素並將它們添加回DOM。 –

+0

太棒了!謝謝! –