3

下面的代码 console.log 将得到[<div class="a" id="0">0</div>, <div class="a" id="1">1</div>, ..]
How to know 兄弟 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

4 回答 4

6

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

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

如果您想使用data-id,只需替换el.id$(el).data('id').

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

于 2013-06-04T06:33:38.293 回答
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;
   }
});
于 2013-06-04T06:25:55.323 回答
1

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

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>

查看 jQuery 数据

于 2013-06-04T06:34:28.157 回答
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);
于 2013-06-04T06:30:49.380 回答