获得兄弟姐妹的最大id值

时间:2013-06-04 06:23:09

标签: jquery

在代码console.log下面会得到[<div class="a" id="0">0</div>, <div class="a" id="1">1</div>, ..]
如何知道兄弟div .a的id值是最大的?

$('.a').hover(function(){
    console.log('$('.a')');
},function(){});

HTML

<div class="a" id="0">0</div>
<div class="a" id="1">1</div>
<div class="a" id="2">2</div>
<div class="a" id="3">3</div>

4 个答案:

答案 0 :(得分:6)

这是我能想到的最短代码:

var high = Math.max.apply(null, $('.a').map(function(_, el) {
    return +el.id;
}));

如果您希望使用data-id,只需将el.id替换为$(el).data('id')

请注意,此方法不是“数据安全”,因为它在尝试查找最大值之前不会清理单个值。如果你在错误的元素(垃圾进入)上运行它,你将得到错误的答案(垃圾输出)。不要那样做。 ; - )

答案 1 :(得分:2)

首先,您不应该使用以数字开头的id。它们在HTML5中是正确的,但在许多工具和CSS中都存在问题。

但是如果你想获得id最大的元素,你可以这样做:

var me;
$('.a').each(function(){
   var num = Number(this.id); // this ensures the id is only a number
   if (num && !(me && me.id>num)) {
      me = this;
   }
});

现在假设您的ID为“a1”,“a2”等

然后你可以做

var me;
$('.a[id^="a"]').each(function(){
   var num = Number(this.id.slice(1));
   if (num && !(me && me.id.slice(1)>num)) {
      me = this;
   }
});

答案 2 :(得分:1)

我使用了不同的方法而不是id我使用了data-id

Example on jsFiddle

// this var will store the element with the highest ID
var big;
$(".a").each(function() {
    if (!big) // if big is not set, assume the first is the highest
        big = this;
    else
    {
        // retrieves the `data-id` from the element
        // converts to integer and compare, re-assign big if needed
        if (parseInt($(this).data("id")) > parseInt($(big).data("id")))
            big = this;
    }
});

// displays the `data-id` of the element with the highest value
alert($(big).data("id"));

html代码:

<div class="a" data-id="0">0</div>
<div class="a" data-id="30">30</div>
<div class="a" data-id="1">1</div>
<div class="a" data-id="2">2</div>
<div class="a" data-id="3">3</div>

See jQuery data

答案 3 :(得分:0)

检查一下。

var highestVal = parseInt($('.a').first().attr('id'));
$('.a').first().siblings().each(function(index, item){
    var crntVal = parseInt($(item).attr('id'));
    if (crntVal > highestVal) { highestVal = crntVal; }
});
alert(highestVal);