Javascript firefox 33中生成的表为空
我试图生成一个带有简单“for”循环的表,所有行和单元格都生成得很好,但在Firefox中它们看起来是空的。如果你试图在任何阶段记录单元格的内部文本,内容就在那里,似乎是它打破了一切 下面是代码示例: html jsJavascript firefox 33中生成的表为空,javascript,html,css,firefox,dom,Javascript,Html,Css,Firefox,Dom,我试图生成一个带有简单“for”循环的表,所有行和单元格都生成得很好,但在Firefox中它们看起来是空的。如果你试图在任何阶段记录单元格的内部文本,内容就在那里,似乎是它打破了一切 下面是代码示例: html js for(var i=0;ifirefox的问题在于您使用的是.innerText,这不是标准属性 改用.textContent 为了支持IE8,我通常为整个应用程序创建一个变量,该变量将引用正确的属性名。如下所示: var text = ("textContent" in do
for(var i=0;ifirefox的问题在于您使用的是.innerText
,这不是标准属性
改用.textContent
为了支持IE8,我通常为整个应用程序创建一个变量,该变量将引用正确的属性名。如下所示:
var text = ("textContent" in document.documentElement) ? "textContent" : "innerText";
然后像这样使用它:
td[text] = "test";
虽然我不知道这会有什么不同,但在将行添加到表之前,可以通过附加到documentFragment
来避免接触循环中的DOM
// Generic container for holding the rows before they're appended
var frag = document.createDocumentFragment();
for(var i=0; i<=5; i++){
var tr = document.createElement('tr');
for(var j=0; j<=5; j++){
var td = document.createElement('td');
td.textContent = "test";
frag.appendChild(td);
}
}
// Appends all the rows at once
document.getElementById('table').appendChild(frag);
//用于在追加行之前保存行的通用容器
var frag=document.createDocumentFragment();
对于(var i=0;i)使用“TetryFultEnter”属性是代码示例的修复,但是您也可以考虑建立一个HTML内容串来注入表中。
var str = '';
for(var i=0; i<=5; i++){
str += '<tr>';
for(var j=0; j<=5; j++){
str += '<td>test</td>';
}
str += '</tr>';
}
document.getElementById('table').innerHTML = str;
var-str='';
对于(var i=0;如果出于性能原因,通常最好先生成表的所有内容,然后一次性进行设置,这样只有一个绘制/回流操作,而不是几个。是的,这很明显,但其目的是显示随时间的变化。无论如何,浏览器直到函数结束才会回流,是吗?每次DOM i更新后可能会出现回流。是的,但在同步操作中,在线程释放之前它不会阻塞吗?我从未见过在线程持续被占用的情况下重新绘制浏览器。谢谢,伙计!textContent工作得很好,关于td[text]的好主意将在将来牢记在心。
td[text] = "test";
// Generic container for holding the rows before they're appended
var frag = document.createDocumentFragment();
for(var i=0; i<=5; i++){
var tr = document.createElement('tr');
for(var j=0; j<=5; j++){
var td = document.createElement('td');
td.textContent = "test";
frag.appendChild(td);
}
}
// Appends all the rows at once
document.getElementById('table').appendChild(frag);
var str = '';
for(var i=0; i<=5; i++){
str += '<tr>';
for(var j=0; j<=5; j++){
str += '<td>test</td>';
}
str += '</tr>';
}
document.getElementById('table').innerHTML = str;