首页 新闻 会员 周边

关于js操作HTML的疑惑

0
悬赏园豆:50 [已解决问题] 解决于 2015-04-29 14:37

一直有个疑惑存在心里,js操作html中的元素的原理是怎样的,打个比方,一个div中有一个四行四列的table,现要替换第二列和第四列的数据,我的理解后台语言操作html时,无论是以何种方式,应该都是将这个div读到内存中保存成字符串,然后进行字符串替换,将最终的字符串返回,那在前台通过js操作呢?

现假定已有八个现成的数据,只需js替换到table中

问题:

1.js也是将整个html页面读成字符串(如果是,从哪读?内存?浏览器缓存?还是硬盘上的缓存区?或是其他的?),然后进行字符串的拼接替换吗?

2.①用js找到相应的td标签(有八个也就是一半的单元格需要赋值),然后将其值赋为给定的数据;

②直接在js文件中全新拼接整个table对应的字符串,给定的数据也一起拼接进去,然后将其整体赋给div的innerHTML;

这两种方式哪种更优(效率和内存损耗等方面)?

3.能给我讲讲js操作html的原理就更好了(和问题相关的帖子的链接地址也可);

希望各位大牛多多指点解惑,小子感激不敬!

问题补充:

没人回答啊

煮诗君的主页 煮诗君 | 初学一级 | 园豆:141
提问于:2013-03-14 16:01
< >
分享
最佳答案
0

我是这么理解的:

浏览器在构造页面的时候,本身就是需要对html进行解析,构造出来一个所谓的DOM树,这是内存中的一个数据结构。这也就是为什么我们打开一个网页需要占用一些内容的原因。

浏览器都有一个javascript引擎,这个引擎可以对之前构造出来的DOM树进行访问或者修改。这个是很自然的。到了javascript这个级别,已经不再有html的概念,它是面对一个一个的对象(在DOM树上,我们称为节点)进行操作。

收获园豆:50
陈希章 | 老鸟四级 |园豆:2538 | 2013-03-15 08:25

你的意思是说浏览器终端这边不存在一个类似文本格式的文件,也不存在一个字符串,而是在浏览器内存中直接构造了一个DOM树结构,显示的时候直接将DOM树以一定的方式显示,如果拼接字符串,js引擎会耗资源先将其转换成DOM树结构,再进行下一步操作,也就是说,我提的第2问的第①个解决方案更优些(当然只从性能方面考虑)?

煮诗君 | 园豆:141 (初学一级) | 2013-03-15 10:04

@学无止尽井: 我是这么理解的

陈希章 | 园豆:2538 (老鸟四级) | 2013-03-15 10:43
其他回答(3)
0

浏览器内核的信息希望能对你有所帮助

http://www.docin.com/p-283512183.html

stabley107 | 园豆:259 (菜鸟二级) | 2013-03-14 19:45
0

最好是前台用JS对 DOM 对象进行操作,不仅有现成的方法而且易于理解,跟拼接比起来不易出错,但性能会差些。

geass.. | 园豆:1821 (小虾三级) | 2013-03-14 22:25

我遇到过这样一种情况,就是对一个div中的蛮多不同标签里的数据做动态实时更新(暂假定每100毫秒更新一次,如果只更新一次或几次可能性能上不会有太大区别),如果每次都精确的找到对应的标签,然后赋值,感觉蛮麻烦,而且就如上面的table,并不是每个单元格都要更新,而且还可能有其他非table标签,感觉查找起来比较麻烦,还不如一次全部替换掉来得直接,但就是不清楚优缺点怎样?

支持(0) 反对(0) 煮诗君 | 园豆:141 (初学一级) | 2013-03-15 10:19
0

简单说,浏览器是c++写的一个软件,浏览器通常会把DOM和javascript单独实现,在IE中实现javascript的是jscript.dll,实现DOM的是mshtml.dll。js可以操作dom,但性能开销较大也就是这个原理。DOM负责渲染页面,每个节点的关系,以及布局信息(大小颜色位置等信息)

三剑客 | 园豆:92 (初学一级) | 2013-12-30 21:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册