0

我有一个简单的 javascript 函数,可以将一行文本框分成多行。功能如下:

function newline(componentID)
{

    var cols = document.getElementById(componentId).getElementsByTagName('td');
    var colslen = cols.length;
    var i = -1;
    var tempInnerHTML = '<tbody><tr>';

    while (++i < colslen)
    {
        tempInnerHTML += '<td>' + cols[i].innerHTML + '</td>'
        if ( i == 9 || i == 19 || i==29 ) { tempInnerHTML += '</tr><tr>'; }
    }
    tempInnerHTML += '</tr></tbody>';
    document.getElementById(componentId).InnerHTML = tempInnerHTML; 

}

该功能在 FireFox 上运行良好,但在 IE 9.0 中无法运行 原因是document.getElementById(componentId).InnerHTML = tempInnerHTML; 我们无法在 IE 9.0 中直接设置 innerHTML

所以我尝试将上述功能更改为:

function newline(componentID)
{

    var cols = document.getElementById(componentId).getElementsByTagName('td');
    var colslen = cols.length;
    var i = -1;
    var tempInnerHTML = '<tbody><tr>';

    while (++i < colslen)
    {
        tempInnerHTML += '<td>' + cols[i].innerHTML + '</td>'
        if ( i == 9 || i == 19 || i==29 ) { tempInnerHTML += '</tr><tr>'; }
    }
    tempInnerHTML += '</tr></tbody>';
    var div = document.createElement("div");
    div.innerHTML = tempinnerHTML;
    document.getElementById(componentId).appendChild(div.firstChild.tBodies[0]); 

}

但是,上述功能不适用于 FireFox 以及 IE 9.0 问题在于声明

document.getElementById(componentId).appendChild(div.firstChild.tBodies[0]);

我需要让该功能同时在 FireFox 和 IE 9.0 上工作。

任何帮助将非常感激。

提前致谢!!

4

1 回答 1

3

这不能在没有浏览器的情况下工作。

改变

document.getElementById(componentId).InnerHTML = tempInnerHTML; 

document.getElementById(componentId).innerHTML = tempInnerHTML; 

JavaScript 区分大小写。


在您的编辑之后:您还有另一个错误:

tempInnerHTML += '</tr></tbody>';
var div = document.createElement("div");
div.innerHTML = tempinnerHTML;

不能将 tbody 添加到 div。某些浏览器可能会尝试通过插入表格来为您修复它,但这不是指定的行为。您应该创建一个table元素(并跳过 firstChild 步骤)。而且你可能甚至不应该使用这个 div 或 table,这是一个无用的步骤:直接创建 tbody 并附加它。

于 2013-11-02T10:17:03.280 回答