我懂文件。写作被认为是坏习惯;我希望整理一份理由清单,提交给第三方供应商,告诉他们为什么不应该使用文档。编写分析代码的实现。

请附上申领文件的理由。下面是一个坏习惯。


当前回答

它覆盖了页面上的内容,这是最明显的原因,但我不认为它“坏”。

除非使用JavaScript创建整个文档,否则它没有多大用处,在这种情况下,您可以从document.write开始。

即便如此,在使用文档时,您并没有真正利用DOM。写——你只是在向文档中倾倒一团文本,所以我认为这是糟糕的形式。

其他回答

一些比较严重的问题:

document.write (henceforth DW) does not work in XHTML DW does not directly modify the DOM, preventing further manipulation (trying to find evidence of this, but it's at best situational) DW executed after the page has finished loading will overwrite the page, or write a new page, or not work DW executes where encountered: it cannot inject at a given node point DW is effectively writing serialised text which is not the way the DOM works conceptually, and is an easy way to create bugs (.innerHTML has the same problem)

最好使用安全且DOM友好的DOM操作方法

这是我的两便士,一般来说,你不应该使用文件。为繁重的任务编写,但有一个实例绝对有用:

http://www.quirksmode.org/blog/archives/2005/06/three_javascrip_1.html

我最近在尝试创建AJAX滑块库时发现了这一点。我创建了两个嵌套的div,并应用宽度/高度和溢出:隐藏到外部<div>与JS。这样,在浏览器禁用JS的情况下,div将浮动以容纳图库中的图像-一些漂亮的优雅降级。

问题是,与上面的文章一样,这种JS劫持CSS直到页面加载后才开始,导致div加载时出现短暂的闪光。所以我需要写一个CSS规则,或包括一个表,作为页面加载。

显然,这在XHTML中行不通,但由于XHTML似乎是一个死鸭(并且在IE中呈现为标签汤),可能值得重新评估您对DOCTYPE的选择…

一个简单的原因为什么文件。写是一个不好的做法,因为你无法想出一个你找不到更好的替代方案的场景。 另一个原因是您正在处理字符串而不是对象(这是非常原始的)。 它只附加到文档中。 它没有MVC(模型-视图-控制器)模式的美感。 使用ajax+jQuery或angularJS来呈现动态内容要强大得多。

可以将document.write()(和. innerhtml)看作是对源代码字符串求值。这对于许多应用程序来说非常方便。例如,如果您从某个源获取HTML代码作为字符串,那么只需“计算”它就很方便。

在Lisp的上下文中,DOM操作就像操作一个列表结构,例如通过执行以下操作创建列表(橙色):

(cons 'orange '())

而document.write()就像求值一个字符串,例如通过这样求值一个源代码字符串来创建一个列表:

(eval-string "(cons 'orange '())")

Lisp还具有使用列表操作创建代码的非常有用的能力(例如使用“DOM样式”创建JS解析树)。这意味着你可以使用“DOM样式”构建一个列表结构,而不是“字符串样式”,然后运行该代码,例如:

(eval '(cons 'orange '()))

如果您实现编码工具,例如简单的实时编辑器,那么能够快速计算字符串是非常方便的,例如使用document.write()或. innerhtml。Lisp在这个意义上是理想的,但是你也可以用JS做一些很酷的事情,很多人都在做,比如http://jsbin.com/

文档其实没什么问题。写作本身。问题是它很容易被误用。严重,甚至。

对于提供分析代码的供应商(如谷歌analytics)来说,这实际上是他们分发此类代码片段的最简单方法

它使脚本保持较小 他们不必担心重写已经建立的onload事件或包括必要的抽象来安全地添加onload事件 它非常兼容

只要你不尝试在文件加载后使用它,文件。在我看来,写作本身并不是邪恶的。