2012-01-29 90 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);