2011-07-26 22 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

相关问题