2012-02-23 35 views
0

我試圖建立一個下拉菜單,當你將鼠標懸停在其中一個單元格上時,它會在其一側顯示一行。我真的很習慣使用DOM和JavaScript。如何從JavaScript中的數組訪問DOM節點?

我遇到的問題是,我創建的數組似乎不能訪問我認爲應該的東西。這只是我的語法,還是我需要以不同的方式處理?這裏是我的代碼:

window.onload = function() { 
    var tableID = "strokerKitMenu"; 
    var table = document.getElementById(tableID); 
    var tableRows = table.getElementsByTagName("tr"); 
    var tableCell = []; 
    var counter = 0; 
    for (i = 0; i < tableRows.length; i++) { 
     tableCell[i] = new Array(); 
     tableCell[i].push(tableRows[i].getElementsByTagName("td")); 
    } 

    for (i = 0; i < tableCell.length; i++) { 
     tableCell[0, i].style.display = "block"; //This doesn't compile 
     alert(tableCell[0, i].Text); //This comes back "undefined" 
     for (j = 1; j < tableCell[i].length; j++) //I haven't even tested this part yet 
     { 
      tableCell[i][j].onmouseover = function showCell() { 
       tableCell[i][j + 1].style.display = "block"; 
      } 
      tableCell[i][j].onmouseout = function hideCell() { 
       this.style.display = "none"; 
      } 
     } //end inner for loop 
    } //end outer for loop 
} 
+0

請不要改變你的問題反映答案中給出的代碼。它使答案過時並令人困惑。 – 2012-02-23 18:18:32

回答

0

tableCell[i].push.apply(tableCell[i], tableRows[i].getElementsByTagName("td"));

你不想推單一陣列中,同時要推動中的所有元素。否則,你將不得不訪問它們作爲tableCell[i][0][j]

+0

'tableRows'是一個2D數組? – 2012-02-23 19:36:15

1
tableCell[0, i].style.display="block"; //This doesn't compile 

這句法無效在JavaScript:您指定兩個指數爲tableCell但我猜你的意思tableCell[0][i].style.display="block";

alert(tableCell[0, i].Text);    //This comes back "undefined" 

一旦你解決的第一個錯誤,你將要更改爲tableCell[0][i].textContent

+0

我嘗試了你的建議,但我仍然得到相同的錯誤。其他想法? – Riet 2012-02-23 18:23:25

+0

什麼是「相同的錯誤」? 「不編譯」和「未定義的值」?你嘗試過任何調試器嗎? (Chrome開發者工具或Firebug) – 2012-02-23 18:33:13