2014-02-26 144 views
1

我有一個<ul>列表,其中所有的孩子<li>有規模的這樣一個「自制」屬性:jQuery的添加子元素的屬性

<ul class="container"> 
    <li size="3"></li> 
    <li size="5"></li> 
    <li size="2"></li> 
</ul> 

我如何獲得所有孩子的大小值然後添加它們,所以我最終得到一個等於(在這種情況下)10的變量?
孩子的數量和size號碼是動態的,所以我猜我需要某種循環?

+0

你爲什麼不使用數據 - '*'屬性? –

回答

5

這是最簡單的方法:

var sum = 0; 

$('.container li').each(function() { 
    sum += +$(this).attr('size'); 
}); 

console.log(sum); 

這裏是現代瀏覽器更復雜的方式:

var sum = $('.container li').map(function() { 
    return +$(this).attr('size'); 
}).get().reduce(function(a, b) { 
    return a + b; 
}); 

console.log(sum); 
+0

@ RokoC.Buljan嗯,也許是因爲通常人們會使用它來將集合減少到某個特定值,如Map/Reduce算法。但是,您也可以利用'reduce'來展開數組或將其轉換爲對象。 – VisioN

1

嘗試,

var sum = 0; 

$('.container li[size]').each(function(){ 
    sum += +$(this).attr('size'); 
}); 

console.log(sum); 

注:坦率地說,我只是複製從視覺的答案求和的東西。

0

你的意思是這樣的:

var sum = 0; 
$('.container li').each(function() { 
var p = parseInt($(this).prop('size')); 
sum += p; 
}); 
alert(sum); 

Working Fiddle

+1

我相信你的意思是'sum + = p;'而不是'sum + = q;' – dreamweiver

+0

@dreamweiver:是啊....謝謝。 –

0

嘗試使用自定義屬性此

$(function(){ 
    var sum = 0; 
    $(".container>li[size]").each(function(){ 
     var p = parseInt($(this).attr('size')); 
     sum += p; 
    }); 
    alert(sum); 
}); 

DEMO