在Jquery中查找和比较具有匹配属性值的元素

时间:2011-09-07 13:21:18

标签: javascript 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 个答案:

答案 0 :(得分: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的所有实例,并检查是否还没有条目,或者当前保存的值是否低于当前元素值,在这种情况下,它将更新数组条目。

这将为您留下一个数组,其中包含values的所有可能值的所有最大data-x

编辑

对不起,存在一些语法错误。

编辑2

较短版本

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

答案 1 :(得分:1)

你毫无疑问的问题是你在比较字符串(用.val()获得),而不是数字。这有一个非常不同的行为 - 有效地决定哪一个按字母顺序排在另一个之前。

更改此行:

if(num1 > num2){

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