2012-01-29 31 views
2

我在页面上有几个div。它们的格式如下:根据部分匹配查找div ID的值

<div id='profile-1'></div> 
<div id='profile-2'></div> 
<div id='profile-3'></div> 
<div id='profile-4'></div> 

我需要找到具有最高ID的div的值。在前面的例子中,它将是“profile-4”(因为4是最高的)。

我已经想通了如何通过的div使用搜索:

var elements = $('[id^=profile-]') 

这将返回一个对象。我需要考虑这个对象,并发现“profile-4”是最高的,如果可能的话提取值“4”。

任何想法?

回答

6

你可以这样做:

var highest = 0; 
$('[id^=profile-]').each(function(){ 
    var id = parseInt(this.id.split('-')[1], 10); 
    highest = id > highest ? id : highest; 
}); 

alert(highest); // 4 

这将工作,即使你有不同的顺序如:

<div id='profile-1'></div> 
<div id='profile-20'></div> 
<div id='profile-3'></div> 
<div id='profile-4'></div> 

在这种情况下,20会提醒。

+1

你已经忘记的重要组成部分 - 铸造为整数。添加

并检查结果:) – Cheery 2012-01-29 06:02:02

+0

@Cheery:没有检查它实际:)现在更新。谢谢 – Sarfraz 2012-01-29 06:03:54

+0

这返回值为“0”; http://jsfiddle.net/SrYsD/ – 2012-01-29 06:08:35

1

大厦@Sarfraz's answer,您可以使用map打造精美混淆代码:

var highest = Math.max.apply(null, $('[id^="profile-"]').map(function() { 
    return [parseInt(this.id.split('-')[1], 10)]; 
})); 

console.log(highest); 
2

这里只是另一种方式来做到这一点:如果在div的总是按升序排列(如在你的HTML段,您提供的),你可以这样做:

$('div[id^=profile-]').get().reverse()[0] 
+1

http://jsfiddle.net/y9Ef9/ – Ashraf 2012-01-29 06:06:23

0
var highest = Math.max.apply(null, $.map($('[id^=profile-]'), function(el) { 
    return el.id.split('-')[1]; 
});) 

var highest_div = $('#profile-'+highest);