最近被一个奇怪的脚本问题困扰了好长时间,今天终于将原因弄清楚了,而且这个经验的确值得总结一下。
insertCell是html里的,appendChild是dom里的,其实两者并没什么关联(我也不知道对不对,暂且就当它是这样吧~),但还是想把它们扯在一起说。
事情是这样的,公司开发有一个下拉框的控件,是根据用户输入的数据实时查询数据库,显示与输入内容相关的数据,类似于C/S下的ComboBox。
将这个控件添加到科室申领系统之后,出现了一些怪事,就是在这个控件的选择项目之后的回调函数里面,返回的数据竟然错位了。由于出错的几部机器都是windows2000,开头还以为是系统的问题。查了好久,最后竟然发现是控件将从数据库取回来的数构造成html时的脚本里出了问题。然后就把这个方法考出来,写了一个单独的html文件,结果发现在我的开发机上和另外一部windows2000机器上返回的结果不一样……再一步一步的查,最后确定是insertCell函数出问题。
今天,我又花了一早上的时间研究这个问题,难道这几个脚本真的跟系统有关?通过查相关资料,一些教程上说,insertCell是将cell插入到row的最后一个子元素后面,原文对insertCell的参数说明如下“The default value is -1, which appends the new cell to the end ofthe cells collection.”照这样看来,应该不会出错呀,每次新增一个cell对象都插入到最后面,这就是我想要的啊,为什么在我的电脑上可以,而有些电脑就不行呢?
于是,继续追查原因,我写了一个html文件,模拟这个运行环境,经过一段时间的测试。终于查明了真相,insertCell函数果然是问题的关键!
原来insertCell并没有像我们所想的那样将cell对象插入到row的最后一个子元素后面,它只是插入到最后一个可见子元素后面而已。其实这样讲,也没有完全正确。因为我发现有一种情况例外,在某个条件下,它确实是插入到最后一个子元素的后面了,也就是说和appendChild一样。
也许这样讲很不好了解,下面帖出我写的html文件的代码~在程序里可以看到把insertCell改为appendChild后就能正常工作了。怀疑insertCell和机器的性能有关系,如果循环执行的时候太慢就会像单步执行那样得到不是自己想要的顺序。而连续执行就不会出错。具体为什么会这样,我也搞不懂……
<tablestyle="width:100%;height:100%;" border="1px"cellpadding="1px" cellspacing="1px">
<tr height="50%">
<td>
<table id="newTbl"style="width:100%;height:100%;" border="1px"cellpadding="1px" cellspacing="1px">
<trid="newTr">
</tr>
</table>
</td>
</tr>
<tr>
<td>
<tablestyle="width:100%;height:100%;" border="0" cellpadding="0"cellspacing="0">
<tr>
<tdstyle="width:200px;" align="center">
<inputtype="button" value="单步insertCell" onclick="tr_insertCell()" />
<br /><br/>
<inputtype="button" value="单步appendChild" onclick="tr_appendChild()" />
<br /><br/>
<inputtype="button" value="连续insertCell" onclick="tr_insertCells()" />
<br /><br/>
<inputtype="button" value="连续appendChild" onclick="tr_appendChilds()" />
<br /><br/>
<inputtype="button" value="重 置" onclick="reset()" />
</td>
<td><textareastyle="height:100%;width:100%;"id="txtResult"></textarea></td>
</tr>
</table>
</td>
</tr>
</table>
<script type="text/javascript"language="javascript">
var i = 1;
function tr_insertCell()
{
var newTr = document.getElementById("newTr");
var td = newTr.insertCell();
td.innerText = i++;
if (i % 3 == 0) td.style.display = "none";
txtResult.value = newTr.innerHTML;
}
function tr_appendChild()
{
var newTr = document.getElementById("newTr");
var td = document.createElement("TD");
newTr.appendChild(td);
td.innerText = i++;
if (i % 3 == 0) td.style.display = "none";
txtResult.value = newTr.innerHTML;
}
function tr_insertCells()
{
for(var j = 0; j < 10; j++)
tr_insertCell();
}
function tr_appendChilds()
{
for(var j = 0; j < 10; j++)
tr_appendChild();
}
function reset()
{
i = 1;
txtResult.value = "";
var newTr = document.getElementById("newTr");
while (newTr.childNodes.length > 0)
newTr.removeChild(newTr.firstChild);
}
</script>
分享到:
相关推荐
总的来说,理解`insertCell`和`appendChild`在不同浏览器中的行为差异对于编写兼容性良好的JavaScript代码至关重要。在谷歌浏览器中,如果希望新插入的单元格按照代码执行顺序显示,应优先考虑使用`appendChild`。...
写一个小系统时,需要动态添加表单元素,按自己的实现方法写了这篇教程! 我想各位在很多网站上都看到...3、用appendChild方法,将元素追加到某个标签内容中! TemO.appendChild(newInput); Javascrip核心代码: <sc
2. 使用 `insertRow()` 和 `insertCell()` 方法 `insertRow()` 方法可以将新行添加到表格中,`insertCell()` 方法可以将新单元格添加到行中。这些方法可以避免 IE 浏览器上的问题。 insertRow() 和 insertCell() ...
`insertRow()`、`deleteRow()`、`insertCell()`和`deleteCell()`是四个关键的方法,它们允许开发者直接操纵`<table>`元素的结构。 首先,`insertRow()`方法用于在表格中插入新的行。它的语法是`tableObject....
- 插入行和列:使用`insertRow()`和`insertCell()`方法,可以在表格的指定位置插入新行和新列。 - 删除行和列:使用`deleteRow()`和`deleteCell()`方法,可以删除指定的行或列。 - 访问单元格:通过`rows`和`cells`...
JavaScript是一种强大的客户端脚本语言,广泛应用于网页交互和动态效果的实现。在HTML页面中,JavaScript可以用来动态创建和操作元素,包括表格。本压缩包中的"javascript 动态创建表格:新增、删除行和单元格.zip...
在JavaScript中,添加和删除表格是常见的操作,特别是在动态网页设计和前端开发中。这篇文章将深入探讨如何使用JavaScript实现这个功能,并提供一个简单的源码示例。首先,我们需要理解HTML表格的基本结构,然后利用...
在JavaScript的世界里,BOM(浏览器对象模型)和DOM(文档对象模型)是两个至关重要的概念,它们允许开发者与用户的浏览器进行深入交互。 **BOM(浏览器对象模型)**: BOM是浏览器提供的一系列接口,它允许...
通过上述步骤,我们已经了解了如何使用 JavaScript 来实现一个基本的表格功能集合,包括创建表格、添加记录、批量删除、模糊查询和文本框编辑。这些技术对于构建动态网页应用非常有用,可以大大提高用户体验和应用...
在探讨如何使用JavaScript动态创建一个2000行5列的大规模表格时,我们首先要理解JavaScript DOM(Document Object Model)操作的基本概念。DOM是用于HTML和XML文档的标准对象模型和编程接口,允许程序和脚本动态地...
在JavaScript的世界里,HTML表格(Table)是一种常用的数据展示方式,而JS操作表格则成为网页动态交互的关键。本文将深入探讨如何使用JavaScript进行表格的创建、修改、删除以及实现一些特殊效果。 首先,我们从...
这种方法是最直接的实现方式,它利用了`HTMLTableElement`对象提供的`insertRow()`和`insertCell()`方法来创建新的行和单元格。这种方式简单易懂,适合于快速构建表格。 ```javascript function tableAdd() { var ...
在探讨“js删除本行代码”这一主题时,我们深入解析如何利用JavaScript动态地生成带有删除功能的表格行,并在用户交互中实现行的删除。这个功能在许多Web应用中非常常见,尤其是在需要用户能够编辑或管理列表数据的...
动态增删表格行的纯JavaScript实现并不复杂,关键在于理解DOM操作和事件处理。通过创建和操作HTML元素,结合数据模型,我们可以轻松实现这一功能。在实际项目中,根据需求,可能还需要考虑数据的持久化、表单验证、...
2. **插入/删除行和列**:使用`insertRow()`和`deleteRow()`方法,以及`insertCell()`和`deleteCell()`。 **事件处理** 1. **监听表格事件**:可以为表格元素添加事件监听器,如`click`, `mouseover`等。 ```...
本文将深入探讨如何使用JavaScript来动态地创建、操作和展现`<table>`,以及如何结合其他技术,如单点登录(Single Sign-On, SSO)和选项卡切换,来增强用户界面。 首先,让我们关注如何使用JavaScript来创建一个...
利用js来动态创建表格有两种格式,appendChild()和insertRow、insertCell()。两种方式其实差不多,但第一种有可能在IE上有问题,所以推荐大家使用第二种方法,看下面的解决和使用方法
原生JavaScript实现的类似Excel功能虽然不如专门的库(如Handsontable、SheetJS等)功能全面,但它提供了一种轻量级且可控的解决方案,适合在特定场景下快速实现基本的电子表格功能。对于进一步开发和增强功能,可以...
创建表格可以通过`<table>`元素和JavaScript的DOM操作实现,例如,`document.createElement('table')`创建表格,`insertRow()`和`insertCell()`方法添加行和单元格。 5. **显示颜色对话框.html** - JavaScript的`...
### JS添加、删除行知识点详解 #### 一、概述 在网页开发中,动态操作HTML表格(`<table>`)是常见的需求之一,特别是在需要根据用户操作或数据变化实时更新表格的情况下。JavaScript提供了多种方法来实现对表格的...