2011-09-07 52 views
1

我如何去有關選擇擁有jQuery中相同的屬性值的元素。然後比較其中哪些具有更大的價值。
這是我到目前爲止。我遇到的問題是,如果這一對中的第一個數字是較大的數字,我就不會得到任何輸出。查找和比較匹配的屬性值的元素在jQuery中

<script> 
    $(function(){ 
     var j = []; 
     $('.loo').each(function(index){ 
      var grp = $(this).attr('data-x'); 
      var num = $(this).val(); 
      var id = $(this).attr('id'); 

      var pair_val = pair_value(grp); 
      var pair_id = pair_identity(id); 

      console.log(get_max(num, pair_val, id, pair_id)); 
     }); 

     function get_max(num1, num2, id1, id2){ 
      var decide = 0; 
      if(num1 > num2){ 
       decide = id1; 
      }else{ 
       decide = id2; 
      } 
      return decide; 
     } 

     function pair_value(conn){ 
      var pair = $("input[data-x="+ conn +"]").val(); //my problem is here 
      return pair; 
     } 

     function pair_identity(conn){ 
      var pair_id = $("input[data-x="+ conn +"]").attr('id'); //my problem is here 
      return pair_id; 
     } 


    }); 
    </script> 

HTML:

<p> 
    <input type="text" id="e" name="e" class="loo" value="1" data-x="a"> 
    </p> 
    <p> 
    <input type="text" id="f" name="f" class="loo" value="10" data-x="a"> 
    </p> 
    <p> 
    <input type="text" id="g" name="g" class="loo" value="37" data-x="b"> 
    </p> 
    <p> 
    <input type="text" id="h" name="h" class="loo" value="25" data-x="b"> 
    </p> 
    <p> 
    <input type="text" id="i" name="i" class="loo" value="11" data-x="c"> 
    </p> 
    <p> 
    <input type="text" id="j" name="j" class="loo" value="12" data-x="c"> 
    </p> 

回答

2
var highest = new Array(); 

$('.loo').each(function(){ 

    if(!highest[$(this).data('x')] || parseInt($(this).val()) > highest[$(this).data('x')]) 
     highest[$(this).data('x')] = parseInt($(this).val());   

}); 

通過檢查.loo所有實例,這將循環,如果沒有該項尚未或者如果當前保存的值越低比當前的元素值,在這種情況下,它將更新數組條目。

這將讓你用含有data-x

編輯的所有可能值

原諒我所有的MAX values一個數組,一些語法錯誤存在。

EDIT 2

較短的版本

http://jsfiddle.net/kkbkb/1/

1

你無疑會遇到的問題是,你比較字符串(與.val()獲得),而不是數字。這有一個非常不同的behviour - 有效地決定哪一個是在另一個之前按字母順序排列。

改變這一行:

if(num1 > num2){ 

if(parseInt(num1,10) > parseInt(num2,10)){ 
+0

它沒有任何效果。我想問題是,匹配這個選擇器的第一個元素是總是被選中的元素。這就是爲什麼它不能確定更大的數字,如果安排改變了,請幫我修正這段代碼:$(「input [data-x =」+ conn +「]」)。val(); –

相關問題