一直有个疑惑存在心里,js操作html中的元素的原理是怎样的,打个比方,一个div中有一个四行四列的table,现要替换第二列和第四列的数据,我的理解后台语言操作html时,无论是以何种方式,应该都是将这个div读到内存中保存成字符串,然后进行字符串替换,将最终的字符串返回,那在前台通过js操作呢?
现假定已有八个现成的数据,只需js替换到table中
问题:
1.js也是将整个html页面读成字符串(如果是,从哪读?内存?浏览器缓存?还是硬盘上的缓存区?或是其他的?),然后进行字符串的拼接替换吗?
2.①用js找到相应的td标签(有八个也就是一半的单元格需要赋值),然后将其值赋为给定的数据;
②直接在js文件中全新拼接整个table对应的字符串,给定的数据也一起拼接进去,然后将其整体赋给div的innerHTML;
这两种方式哪种更优(效率和内存损耗等方面)?
3.能给我讲讲js操作html的原理就更好了(和问题相关的帖子的链接地址也可);
希望各位大牛多多指点解惑,小子感激不敬!
没人回答啊
我是这么理解的:
浏览器在构造页面的时候,本身就是需要对html进行解析,构造出来一个所谓的DOM树,这是内存中的一个数据结构。这也就是为什么我们打开一个网页需要占用一些内容的原因。
浏览器都有一个javascript引擎,这个引擎可以对之前构造出来的DOM树进行访问或者修改。这个是很自然的。到了javascript这个级别,已经不再有html的概念,它是面对一个一个的对象(在DOM树上,我们称为节点)进行操作。
你的意思是说浏览器终端这边不存在一个类似文本格式的文件,也不存在一个字符串,而是在浏览器内存中直接构造了一个DOM树结构,显示的时候直接将DOM树以一定的方式显示,如果拼接字符串,js引擎会耗资源先将其转换成DOM树结构,再进行下一步操作,也就是说,我提的第2问的第①个解决方案更优些(当然只从性能方面考虑)?
@学无止尽井: 我是这么理解的
最好是前台用JS对 DOM 对象进行操作,不仅有现成的方法而且易于理解,跟拼接比起来不易出错,但性能会差些。
我遇到过这样一种情况,就是对一个div中的蛮多不同标签里的数据做动态实时更新(暂假定每100毫秒更新一次,如果只更新一次或几次可能性能上不会有太大区别),如果每次都精确的找到对应的标签,然后赋值,感觉蛮麻烦,而且就如上面的table,并不是每个单元格都要更新,而且还可能有其他非table标签,感觉查找起来比较麻烦,还不如一次全部替换掉来得直接,但就是不清楚优缺点怎样?
简单说,浏览器是c++写的一个软件,浏览器通常会把DOM和javascript单独实现,在IE中实现javascript的是jscript.dll,实现DOM的是mshtml.dll。js可以操作dom,但性能开销较大也就是这个原理。DOM负责渲染页面,每个节点的关系,以及布局信息(大小颜色位置等信息)