标记并且DOM准备就绪,您就不document.write()
能再使用了.
我不会说使用document.write()
是正确的还是不正确的,这取决于你的情况.在某些情况下,您只需要document.write()
完成任务.看看Google分析如何被注入大多数网站.
在DOM准备好之后,您有两种方法来插入动态HTML(假设我们要插入新的HTML ):
在节点上使用innerHTML:
var node = document.getElementById('node-id'); node.innerHTML('some dynamic html
');
使用DOM方法:
var node = document.getElementById('node-id'); var newNode = document.createElement('p'); newNode.appendChild(document.createTextNode('some dynamic html')); node.appendChild(newNode);
使用DOM API方法可能是做事的纯粹方式,但innerHTML
事实证明它更快,并且在JavaScript库(如jQuery)中使用.
注:在 一些动态的html p>';`?至少在Android上的WebView上,innerHTML不是一个功能. 由于HTML的实际内存表示是DOM,更新给定页面的最佳方法是直接操作DOM. 您要这样做的方式是以编程方式创建节点,然后将它们附加到DOM中的现有位置.对于[人为的]示例,假设我有一个 也许一个好主意是在这种情况下使用jQuery.它提供了方便的功能,你可以做这样的事情: 有关更多信息,请查看http://docs.jquery.com/Attributes/html#val. Tom方法概述了DOM方法. innerHTML,如iHunger所述. DOM方法比设置属性和内容的字符串更受欢迎.如果您发现自己在写作, 与innerHTML相比,DOM方法传统上被描述为"慢".但这并非真正的全部故事.什么是缓慢的插入很多子节点: 这转化为DOM在其节点列表中找到正确位置以插入元素,移动其他子节点,插入新节点,更新指针等等的大量工作. 另一方面,设置现有属性的值或文本节点的数据非常快; 你只需更改一个字符串指针就可以了.这比使用innerHTML对父级进行序列化,更改它并将其解析回来要快得多(并且不会丢失不可重复的数据,如事件处理程序,JS引用和表单值). 有一些技术可以在没有太慢的childNodes行走的情况下进行DOM操作.特别要注意的可能性将要成为你的内部
`node.innerHTML ='
2> Tom..:document.write()
不适用于XHTML.它在页面加载完成后执行,并且只写出一串HTML.div
元素维护ID
"header" 的属性,那么我可以通过这样做来引入一些动态文本:// create my text
var sHeader = document.createTextNode('Hello world!');
// create an element for the text and append it
var spanHeader = document.createElement('span');
spanHeader.appendChild(sHeader);
// grab a reference to the div header
var divHeader = document.getElementById('header');
// append the new element to the header
divHeader.appendChild(spanHeader);
它实际上是在你打电话时执行的.如果您在页面加载后调用它,它将覆盖内容.
坚持HTML和`document.write`仍然是一个有用的工具.
3> Nyla Pareska..:$('div').html('Test');
因为人们在谈论更优雅,更快速和跨浏览器的做事方式,并且不得不加载jQuery来实现它,所以不是答案.
4> bobince..:
innerHTML= ''+text+''
那么实际上是在客户端创建了新的跨站点脚本安全漏洞,如果您花费任何时间保护服务器端,那就有点难过了. for (var i= 0; i<1000; i++)
div.parentNode.insertBefore(document.createElement('div'), div);
cloneNode
和使用方法DocumentFragment
.但有时innerHTML确实更快.您仍然可以通过使用innerHTML编写基本结构,使用属性值和文本内容的占位符来获得两全其美,然后使用DOM填充.这样可以省去编写自己的escapehtml()
函数以解决上面提到的转义/安全问题.