2010-03-17 86 views
1

试图通过我的JavaScript书籍工作我引用学习语言,并陷入循环通过特定行的兄弟姐妹。 W3schools和W3没有我想要的。下面是一个功能演练...通过特定行/设置功能的兄弟姐妹循环

它读取:创建countRecords()函数。此函数的用途是统计表标题后数据表中可见行的数量。总数然后显示在ID为“records”的表格单元格中。将以下命令添加到该函数中:

a。创建一个名为headRow的对象,该对象指向ID为“titleRow”的表格行。创建一个名为rowCount的变量,将其初始值设置为0.

b。创建一个for循环,该循环使用家族引用,从headRow的第一个兄弟开始,移动到下一个兄弟,直到没有兄弟姐妹离开。在for循环中。测试当前下一个兄弟节点的节点名称,直到没有剩余的节点。在for循环测试中,当前节点的节点名称是否等于“TR”。如果是,请测试其显示样式的值是否等于空白文本字符串。如果是(表示它在文档中可见),则将rowCount变量的值增加1.

c。将“records”表格单元格的文本更改为rowCount变量的值。不要使用innerHTML。创建一个包含rowCount变量值的文本节点,并将其分配给名为txt的变量。创建一个名为record的变量来存储对元素“records”表格单元格的引用。 d)。插入一个if条件来测试“records”单元是否有任何子节点。如果是,则用所创建的文本节点(txt)替换“记录”表单元格的文本节点。如果它不将文本节点追加到单元格中。

var headRow;  // part a 
    var rowCount = 0; 

// b部分这是我迷路的地方。我知道我需要访问ID titleRow但不确定如何设置我的循环专门为这个

headRow = document.getElementById("titleRow"); 
    for(var i=0; i<headrow.length; i++) 
{ 
if (something is not equal == "TH") 
     { 
     make code happen here 
     } 
    if (is "TR" == ""){ 
    rowCount = +1; 
} 

// C部分

var txt = document.createTextNode(rowCount); 
var record = document.getElementsById("records") 

// d部分在此部分持观望态度,直到我a,b,c想通了。

的HTML支持片断:

<table id="filters"> 
<tr><th colspan="2">Filter Product List</th></tr> 
<tr> 
<td>Records: </td> 
<td id="records"></td> 
</tr> 

<table id="prodTable"> 
<tr><th colspan="8">Digital Cameras</th></tr> 
<tr id="titleRow"> 
<th>Model</th> 
<th>Manufacturer</th> 
<th>Resolution</th> 
<th>Zoom</th> 
<th>Media</th> 
<th>Video</th> 
<th>Microphone</th> 
</tr> 

感谢您的帮助!

回答

3

你应该看看nextSibling属性。我不知道你想如何严格按照你的书,但一个while循环似乎比比较合适for

var headRow = document.getElementById("headRow"); 
var rowCount = 0; 
var cRow  = headRow; // used as a reference to the current row 

while (cRow = cRow.nextSibling) // While there is a next sibling, loop 
{ 
    if (cRow.tagName == "TR" && cRow.style.display === "") 
     rowCount++;  // increment rowCount by 1 
} 

如果你在使用for循环坚持,我想你可以做这样的事情:

var headRow = document.getElementById("headRow"); 
var rowCount = 0; 
for (var cRow = headRow.nextSibling; cRow = cRow.nextSibling;) 
{ 
    if (cRow.tagName == "TR" && cRow.style.display === "") 
     rowCount++;  // increment rowCount by 1 
}