原文:http://www.cnblogs.com/birdshome/archive/2005/04/17/139022.html
此文回复中有不少亮点,所以我连回复也一并转载过来了
在IE中使用DOM方式来动态创建页面元素的时候,我发现了一些问题。记录于此,如果您有好的意见欢迎提供,如果您也遇到此问题,希望能有助你解决。
对于动态HTML编程,IE实现了两套模型:一套是以操作innerHTML为主的狭义的DHTML,一套是以集合方式操作(appendChild)页面元素对象的DOM(Document Object Model)。DHTML方式(我本文说的DHTML都默认指的对于innerHTML进行操作的编程方式,不是广义的DHTML。)直接操作html代码片断,主要靠Web程序员使用字符串拼接来生成页面元素,这是一种高效的动态页面操作方式,不过似乎少些编程逻辑的味道,代码中往往散布着大量不完整的html代码片断。而DOM方式进行动态页面编程,在逻辑上是一种对集合和元素对象的操作,编程逻辑比较清晰,不过效率上有一些差别。具体使用什么方式来实现动态Web页面,大多数情况下是个人的喜好问题,除非在效率上必须锱铢必较。
使用DOM,最常用的方法就是document.createElement(sTag),sTag是一个合法的html标签名字(tagName)。我们创建好一个html元素对象后,对它的属性进行赋值,然后insertBefore或appendChild到页面的DOM对象树中。这里msdn提醒了几个注意事项:
1、不能通过编程方式动态创建frame和iframe元素(IE 5.0及以下);
2、input元素被创建后默认的类型是input type='text';
3、需要使用其他类型的input元素,需要在把input对象放入DOM对象树之前给input.type赋予你希望的类型,否则在input insert或append进入DOM对象树后不能再修改;
4、button元素被创建后默认的类型是普通按钮,要使用其它类型按钮,需要遵循和问题3相同的注意事项;
5、不能为通过向元素对象赋值得方式,为元素对象添加NAME属性(这个在"细说HTML元素的ID和NAME属性详解"一文里也是提过的)。
6、sTag其实不只限于html标签名,任何合法的html元素语句都可以。
下面说一下我遇到的问题,当我在使用DOM方式进行动态页面创建的时候,发现不能使用普通的DOM方式为input type='checkbox'和input type='radio'赋初值。即下面的语句:
var input = document.createElement('INPUT');
input.type = 'checkbox';
input.checked = true;
document.body.appendChild(input);
input = document.createElement('INPUT');
input.type = 'radio';
input.checked = true;
document.body.appendChild(input); 不能得到我期望的效果: ,而只能得到: 。
而要得到我期望的效果,需要混合DHTML和DOM两种方式就是说我必须在sTag里就构建好的属性,使用如下代码:
var input = document.createElement('<INPUT checked>');
input.type = 'checkbox';
document.body.appendChild(input);
input = document.createElement('<INPUT checked>');
input.type = 'radio';
document.body.appendChild(input); 才能得到被赋予初值得INPUT元素: 。
MySQL Group Replication: What Is It? Replicated Database State Machine & Paxos implementation
Redis 6.0 docker Cluster
What is the "Docker Subnet" used for?
Windows MYSQL 8.0 或者 5.7 查找my.ini 修改端口号
Kerberos Network Authentication Service Window & Mac
协合新能源集团有限公司 | 红海 eHR BPMN
基于 springBoot 实现webSocket方式的扫码登录
Python中IO编程-StringIO和BytesIO
Neo4j基本入门
- 最新文章
-
Thoughtworks:Adr, Architecture Decision Records轻量级架构决策记录工具
12. Think about micro service
业内公认的 OLAP 数据库黑马 ClickHouse 有哪些复合类型
用5W1H法总结动态表单
一体化电力大数据平台解决方案_电力数据中台-阿里云
知识产权{专利}管理系统产品介绍(代理机构版)
Linux JSLinux BusyBox
Linux wget
Mindset (思维):抽象思维,CRM resource从leads与customer的流程 vs. JVM从Young Generation 到 Old Generation
链家 CRM OA
- 热门文章
-
58同城CRM多目标排序算法 || CRM商机智能分配系统中的多目标排序算法
apache/pulsar: Apache Pulsar
AI 数据清理: Inductiv建立在学术开源项目HoloClean(www.holocl ean.io)的基础上,该项目由滑铁卢大学,威斯康星大学麦迪逊分校和斯坦福大学于2017年联合启动。
openjdk 11 pulsar netty
mysql 5.7 & 8.0 partition row number
Vim 编辑器常用命令
Windows 睡眠(Sleep)、休眠(Hibernate)关机(关机是为了Restart)作用助记
JVM G1 CMS perfma
《编译原理》控制流语句 if 和 while 语句的翻译
携程最终一致和强一致性缓存实践 | DB 用的是 MySQL,缓存介质用的是携程高可用 Redis 服务