javascript innerHTML打印错位

时间:2012-06-24 05:13:00

标签: javascript innerhtml

<table class="privilage">
                <caption> These are the default users for institution </caption>
                <thead>
                    <tr>
                        <th>Users Name</th>
                        <th>User Id</th>
                        <th>Password</th>
                   </tr>
                </thead>
                <tbody>
                         <tr>
                            <td><input type="text" name='DefaultUser[]' value='' ><br></td>
                            <td><input type="text" name='DefaultUser_UserName[]' value=''></td>
                            <td><input type="password" name='DefaultUser_Password[]'></td>
                        </tr>


                <div id="New_User"></div>
                </tbody>
  </table> <table>
                    <tr>
                        <td><input type="button"   name="Add_New_User" value="Add new User" onclick="addRow()"></td>
                    </tr>
                </table>

上面的HTML有一个名为New_User的div,我要求下面的javascript打印到该div的innerHTML,但是它打印到其他地方。

 function addRow()
 {
var d= document.getElementById("New_User");
d.innerHTML+="<tr><th><input type='text' name='DefaultUsers' value=''/> Manager<br></th><th><input type='text' name='UserName' value=''/></th><th><input type='password' name='Password'/></th></tr>";
}​

我只需要将这些新行添加到'privilage'表中。 欢迎任何考虑和帮助。 在此先感谢。

Jsfiddle code

5 个答案:

答案 0 :(得分:2)

遗憾的是,您的HTML DOM结构无效。您无法像div那样在tbody内添加tbody标记。 tr只能包含New_User个标记。

将ID tbody提供给您的{{1}}代码,您的脚本就可以使用。

答案 1 :(得分:1)

您实际上可以在表格中添加新行,而不会在其中添加额外的Div。您可以使用JS内部函数来实现此目的。 另请从 tbody 中删除<div id="New_User"></div>,这会使您的DOM结构无效。

这样做,工作演示:http://jsfiddle.net/epinapala/QPY6b/5/

尽管在表格中添加新属性id =“tableID”!

function addRow() {
            var tableID = "tableID";
            var table = document.getElementById(tableID);

            var rowCount = table.rows.length;
            var row = table.insertRow(rowCount);

            var cell1 = row.insertCell(0);
            var element1 = document.createElement("input");
            element1.type = "text";
            cell1.appendChild(element1);

            var cell2 = row.insertCell(1);
            var element2 = document.createElement("input");
            element2.type = "text";
            cell2.appendChild(element2);

            var cell3 = row.insertCell(2);
            var element3 = document.createElement("input");
            element3.type = "text";
            cell3.appendChild(element3);


        }

答案 2 :(得分:1)

这可能是你想要的...... http://jsfiddle.net/ztnMk/

<table class="privilage">
                <caption> These are the default users for institution </caption>
                <thead>
                    <tr>
                        <th>Users Name</th>
                        <th>User Id</th>
                        <th>Password</th>
                   </tr>
                </thead>
                <tbody id="New_User">
                        <tr>
                            <td><input type="text" name='DefaultUser[]' value='' ><br></td>
                            <td><input type="text" name='DefaultUser_UserName[]' value=''></td>
                            <td><input type="password" name='DefaultUser_Password[]'></td>
                        </tr>
<!-- YOUR NEW TR GOES HERE... -->

                </tbody>

                                                                                                   

这里是JS:

function addRow(){
var d= document.getElementById("New_User");
d.innerHTML+="<tr><th><input type='text' name='DefaultUsers' value='Manager'/> </th><th><input type='text' name='UserName' value=''/></th><th><input type='password' name='Password'/></th></tr>";

}

希望这会有所帮助!

答案 3 :(得分:1)

用带有id的tr替换div并将innerHTML粘贴到其中。在执行此操作之前,请从内部html中删除tr标记。

你可能必须从头开始在你的tr中放入3个空单元格;您也可以从头开始将tr的高度设置为0。然后在tr中粘贴innerHTML之后,您可以删除高度,如下所示:

document.getElementById("myTr").style.height = "";

答案 4 :(得分:0)

我做了一些更改,例如,将你的div移出所有表格,

<table class="privilage">
   <caption> These are the default users for institution </caption>
   <thead>
       <tr>
          <th>Users Name</th>
          <th>User Id</th>
          <th>Password</th>
       </tr>
   </thead>
   <tbody>
       <tr>
          <td><input type="text" name='DefaultUser[]' value='' ><br></td>
          <td><input type="text" name='DefaultUser_UserName[]' value=''></td>
          <td><input type="password" name='DefaultUser_Password[]'></td>
       </tr>
    </tbody>
</table> 
<div id="New_User"></div> 
<table>
  <tr>
     <td><input type="button"   name="Add_New_User" value="Add new User" onclick="addRow()"></td>
  </tr>
</table>

这是在添加用户按钮之前在第一个底部添加新行。请查看此fiddle