2010-03-17 96 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 
}