我懂文件。写作被认为是坏习惯;我希望整理一份理由清单,提交给第三方供应商,告诉他们为什么不应该使用文档。编写分析代码的实现。
请附上申领文件的理由。下面是一个坏习惯。
我懂文件。写作被认为是坏习惯;我希望整理一份理由清单,提交给第三方供应商,告诉他们为什么不应该使用文档。编写分析代码的实现。
请附上申领文件的理由。下面是一个坏习惯。
当前回答
可以将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/
其他回答
这是我的两便士,一般来说,你不应该使用文件。为繁重的任务编写,但有一个实例绝对有用:
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的选择…
它覆盖了页面上的内容,这是最明显的原因,但我不认为它“坏”。
除非使用JavaScript创建整个文档,否则它没有多大用处,在这种情况下,您可以从document.write开始。
即便如此,在使用文档时,您并没有真正利用DOM。写——你只是在向文档中倾倒一团文本,所以我认为这是糟糕的形式。
它可以阻止你的页面
文档。写只在页面加载时工作;如果在页面加载完成后调用它,它将覆盖整个页面。
这实际上意味着你必须从一个内联脚本块中调用它——这将阻止浏览器处理接下来页面的部分内容。直到写入块完成,脚本和图像才会被下载。
文件的另一种合法使用。write来自HTML5 Boilerplate index.html示例。
<!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if offline -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.3/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/libs/jquery-1.6.3.min.js"><\/script>')</script>
我还看到过使用json2.js JSON解析/stringify polyfill (IE7及以下版本需要)的相同技术。
<script>window.JSON || document.write('<script src="json2.js"><\/script>')</script>
根据Google-Chrome Dev Tools的Lighthouse Audit所做的分析,
对于连接速度较慢的用户,通过document.write()动态注入的外部脚本可能会将页面加载延迟数十秒。