使用document.write来修复html

时间:2009-06-02 08:39:31

标签: javascript dom dynamic-data

我正在创建一个包含100个左右值的组合的webform。值是相同的。

表单可能有多条记录。因此,如果有100条记录,那么从“下载”的角度来看,有10,000行看起来非常错误。

问题是:我想保持该组合动态以保持数据库中的id。

所以我提出了以下建议:

  .....
 <script>
      stupidCombo = "<option>a"+
                    "<option>b"+
                    ...
                    "<option>99zzz"+
                    "</select>";
 </script>
 ..... form here
 .... for each item in huge list do paint <table><tr> etc. etc 

 <td>
 <select name="comb-<%=id%>">
      <option selected><%=obj.val%>
      <script>document.write(stupidCombo);</script>
 </td>
... close form, table, html etc. 

我已经渲染它并且“看起来很好”。页面从50k行减少到5k,select由客户端的javascript创建。

我的问题是......

这可以吗?

是否涉及任何风险?

在了解了大多数javascript框架的工作原理之后,我借用了这个想法,但是大多数都在&lt; div&gt; 元素上工作,而不仅仅是文档本身。

我的目标是IE6,这是一个必须在明天早上投入生产的快速解决方案(所以我不想花太多时间在这上面)但是我不希望每个都有50,000行写入请求我是否可以提供帮助。

由于

5 个答案:

答案 0 :(得分:3)

HTTP压缩(mod_gzip等)将很好地压缩所有这些。

如果您坚持document.write,则必须使用JavaScript来编写<select>元素,因为在HTML中,您不能将<script>放入<select> }。

另一种方法是将一个控件副本发送到浏览器,然后在selectElement.cloneNode(true)的帮助下复制它。

答案 1 :(得分:1)

如果禁用javascript,它显然无效。

答案 2 :(得分:1)

document.write生成的HTML与普通的HTML一样,因此您的解决方案不存在任何技术问题。 (当然,这种解决方案仅在启用了javascript时才有效)

顺便说一句,对于包含大量选项的列表,您可以查看"suggest box" component,它可以替换原生选择框。

答案 3 :(得分:0)

谷歌一直在做这件事(“document.write”)(Analytics / Adsense / ...),所以我不明白为什么会出现任何问题。

您的解决方案看起来有点奇怪,因为<script>标记位于<select>标记内,因此您最好在多个浏览器中进行检查。毕竟,你永远不知道IE会做什么:)

答案 4 :(得分:0)

更新

我按照我的要求完成了它并且工作正常。内部的js没有问题,即。

但是...

表格渲染后,用户尝试做的下一件事(总是用户做出意想不到的事情)是......

  

“好的,报告看起来很好。我打算将它复制/粘贴到MS-Excel中谢谢。”

这是我真的不在乎的事情。取决于用户,但结果是:excel电子表格死(或冻结几乎相同)!!!!因为excel中的javascript引擎不如IE中那么好,所以组合需要永远复制,实际上它使excel应用程序无法使用。

我不知道从IE到Excel的复制/粘贴是如此之好,它实际上复制了所有生成的HTML和Excel试图运行javascript也有可怕的结果。

我将再次尝试保留原始html,看看是否效果更好。

:(