2011-07-26 37 views
1

好的,我有我想添加的列,如果他們有任何信息。所以說我有Javascript Adding

  • 賬戶

有4個帳戶空間,但只有3個帳戶。 如何創建Java腳本來添加它。

+2

到目前爲止你做了什麼?你有什麼代碼的例子嗎? –

回答

2

Live Example

HTML:

<ul> 
    <li id="accounts"> 
     <p> Accounts </p> 
     <ul> 
      <li> 1 </li> 
      <li> 2 </li> 
      <li> 3 </li> 
      <li> . </li> 
     </ul> 
    </li> 
</ul> 

的JavaScript:

// Get accounts, ul and set sum to 0 
var acc = document.getElementById("accounts"), 
    ul = acc.getElementsByTagName("ul")[0], 
    sum = 0; 

// Filter out text nodes. Returning an array of <LI> elements 
var lis = Array.prototype.filter.call(ul.childNodes, function(li) { 
    if (li.tagName === "LI") { 
     return true; 
    } 
}); 

// Loop through LIs adding up the sum 
for (var i = 0, ii = lis.length; i < ii; i++) { 
    // If it's the last LI element then set the textContent. 
    if (i === ii - 1) { 
     lis[i].textContent = sum; 
    } else { 
     sum += +lis[i].textContent; 
    } 
} 

免責聲明:需要現代的瀏覽器或Modernizr的。

+0

這比我自己的實現更加整潔...並且循環減少了50%..! ** + 1 ** = D –

+0

@DavidThomas您的實施在哪裏? – Raynos

+0

我很慚愧,但它[JS小提琴](http:// jsfiddle。淨/ davidThomas/HdAqr /)。這與你自己的實現非常相似,這就是爲什麼我沒有發佈它。它只是不那麼漂亮和簡潔... =/ –

0

如果你真正的標記就是這樣一個列表,你可以做這樣的事情:

// using jquery syntax for brevity; consider it pseudocode 

var jList = $('#accounts'); 

function addColumns() { 
    var iSum = 0; 
    jList.find('li').each(function() { 
    var jLI = $(this); 
    if(parseFloat(jLI.text()) != 'NaN') 
     iSum += parseFloat(jLI.text()); 
    }); 
    return iSum; 
} 

這不是超級偉大的代碼。如果您向我們提供一些關於您正在處理的內容的更多信息,則應該提供一些更強大的內容。但基本思想是你檢查一組感興趣的元素,看它們是否具有可彙總的內容(即,如果它們的文本內容可以被解釋爲一個數字);那麼你可以將可加的項目加在一起。

像這樣的算法的要求會強加你的「列」可以被標記的方式的限制。但是有一個近乎無限的可能性。

+0

它說「jQuery」在哪裏? – Raynos

+0

「$」函數以及.find,.each和.text方法都由jQuery提供。正如我在回答中所說的,爲了簡潔起見,我使用了依賴jQuery的語法。即使邁克爾沒有使用jQuery,它也足以像僞代碼一樣,他可能會遵循我正在做的事情。我還用文字解釋了代碼。看起來不像downvote真的是合適的。 – Tom

+0

可能是這樣的。我只是不喜歡jQuery總是一個選項的假設。當人們傾向於要求JavaScript問題時,他們也希望看到真正的DOM操作。將您的代碼轉換爲實際的DOM操作代碼是一個不同的挑戰。 – Raynos

相關問題