2011-08-05 120 views
1

我想检查表格中的特定单元格是否包含使用JavaScript的特定表单。检查表格的单元格是否包含某种形式

这里是我做了什么:

for(var i = 1; i >= mainTable.tBodies[0].rows[2].length; i++) 
{ 
    if(mainTable.tBodies[0].rows[2].cells[i].elements[0] == document.getElementById("my_form")) 
    { 
     var cellIndex = i; 
     alert("cell" + i + " contains the form"); 
     break; 
    } 
} 

"my_form"实际上是内细胞数量1,但如果语句总是假的,尽管它应该在i = 1是真实的。我怎样才能在JavaScript中实现这一点?

编辑:

这里是整个代码:

<HEAD> 
<SCRIPT LANGUAGE="JavaScript"> 
<!-- Begin 

//var mainTable = document.getElementById("mainTable"); 
var index_Skill = 1; 
var index_Speed = 1; 
var index_Age = 1; 
var index_Strength = 1; 
var index_Height = 1; 

function moveUp(theForm) 
{ 
    if(theForm == "form_Skill") 
    { 
     if(index_Skill == 1) 
     { 
      // get the max index of the table 
      var newIndex = Math.max(++index_Skill, ++index_Speed, ++index_Age, ++index_Strength, ++index_Height); 

      // insert a new row 
      var newRow = mainTable.tBodies[0].insertRow(newIndex); 

      // shift the rows one level down 
      for(var i = newIndex; i > 1; i--) 
      { 
       mainTable.tBodies[0].moveRow(i - 1, i); 
      } 

      // delete (skill) from the old index 
      var cellIndex; 
      for(var i = 1; i >= mainTable.tBodies[0].rows[2].length; i++) 
      { 
       if(mainTable.tBodies[0].rows[2].cells[i].elements[0] == document.getElementById("form_Skill")) 
       { 
        cellIndex = i; 
        alert(i); 
        break; 
       } 
      } 
      for(var i = cellIndex; i >= mainTable.tBodies[0].rows[2].length; i++) 
      { 
       mainTable.tBodies[0].rows[2].cells[i].innerHTML = mainTable.tBodies[0].rows[2].cells[i+1].innerHTML; 
      } 
      //mainTable.tBodies[0].rows[2].cells[mainTable.tBodies[0].rows[2].length].innerHTML = ""; 

      // add (skill) to the new index 
      var newCell = mainTable.tBodies[0].rows[1].insertCell(0); 
      newCell.innerHTML = 1; 
      newCell.setAttribute("align", "center"); 
      var newCell = mainTable.tBodies[0].rows[1].insertCell(1); 
      var obj = document.getElementById(theForm).cloneNode(true); 
      newCell.appendChild(obj); 

      // fixes the id's 
      for(var i = 1; i <= newIndex; i++) 
      { 
       mainTable.tBodies[0].rows[i].cells[0].innerHTML = i; 
       mainTable.tBodies[0].rows[i].cells[0].setAttribute("align", "center"); 
      } 

     } 
    } 
} 


function moveDown(theForm) 
{ 

} 


// End --> 
</script> 
</HEAD> 
<BODY> 

    <table id="mainTable" name="mainTable" border="1"> 

     <tr> 
      <th>Rank 
      </th> 
      <th colspan="5"> 
       <p align="center">The Criteria 
      </th> 
     </tr> 
     <tr> 
      <td> 
       <p align="center">1 
      </td> 

      <td> 
       <form name="form_Skill" method="post" style="margin: 0; text-align: center;"> 
        <input type="button" name="Up1" value="Up" onclick="moveUp('form_Skill');"> Skill 
        <input type="button" name="Down1" value="Down" onclick="moveDown('form_Skill');"> 
       </form> 
      </td> 

      <td> 
       <form name="form_Speed" method="post" style="margin: 0; text-align: center;"> 
        <input type="button" name="Up2" value="Up" onclick="moveUp('form_Speed');"> Speed 
        <input type="button" name="Down2" value="Down" onclick="moveDown('form_Speed');"> 
       </form> 
      </td> 

      <td> 
       <form name="form_Age" method="post" style="margin: 0; text-align: center;"> 
        <input type="button" name="Up3" value="Up" onclick="moveUp('form_Age');"> Age 
        <input type="button" name="Down3" value="Down" onclick="moveDown('form_Age');"> 
       </form> 
      </td> 

      <td> 
       <form name="form_Strength" method="post" style="margin: 0; text-align: center;"> 
        <input type="button" name="Up4" value="Up" onclick="moveUp('form_Strength');"> Strength 
        <input type="button" name="Down4" value="Down" onclick="moveDown('form_Strength');"> 
       </form> 
      </td> 

      <td> 
       <form name="form_Height" method="post" style="margin: 0; text-align: center;"> 
        <input type="button" name="Up5" value="Up" onclick="moveUp('form_Height');"> Height 
        <input type="button" name="Down5" value="Down" onclick="moveDown('form_Height');"> 
       </form> 
      </td> 

     </tr> 
    </table> 
</body> 
+0

您写的javascript代码。哪里不对? – Naor

+0

@Naor如果您希望添加/删除行,那么表单所在行的索引是否也会发生变化,请参阅更新 –

+0

?即:在你的代码中,你只是想循环遍历第三行中的单元格。 –

回答

2

一个tr元素本身没有一个.length财产。

此:

for(var i = 1; i >= mainTable.tBodies[0].rows[2].length; i++) 

...应该从cells而不是长度:

// right here -----------------------------------v 
for(var i = 1; i >= mainTable.tBodies[0].rows[2].cells.length; i++) 

而一个<td>没有一个elements财产。我假定你打算.children,这取决于你支持的浏览器。

// ------------------------------------v 
mainTable.tBodies[0].rows[2].cells[i].children[0] 
+0

+1很好的指出了这一点(这就是为什么我建议使用.children代替DOM操作的属性 –

+0

@Samuel:是的,只有'.children'属性的问题在于它不支持Firefox 3(并且IE8和IE8之间存在不兼容问题,但只有当您包含注释节点时才需要考虑) – user113716

+0

+1不错,但我仍然无法获取警报消息,如果if语句为true,它应该弹出顺便说一句,昨天我开始学习JavaScript,所以我可能在我的代码中做了一些基本的错误) –

0

你有一个小错字我猜指数:

for(var i = 0; i <= mainTable.tBodies[0].rows[2].length; i++) 
{ 
    if(mainTable.tBodies[0].rows[2].cells[i].elements[0] == document.getElementById("my_form")) 
    { 
     var cellIndex = i; 
     alert("cell" + i + " contains the form"); 
     break; 
    } 
} 
相关问题