document.write的替代品

我的情况似乎我必须在javascript库中使用document.write。 脚本必须知道定义脚本的区域的宽度。 但是,该脚本对该区域中的任何标记都没有任何明确的知识。 如果有明确的div知识,那么就像这样简单:

<script ref... //inside of referenced script var divWidth = $("#childAnchor").width();

所以,在引用的脚本中,我正在考虑使用document.write这样:

 <script ref... //inside of referenced script var childAnchor = "z_87127XNA_2451ap"; document.write('
'); var divWidth = $("#" + childAnchor).width();

但是,我真的不喜欢document.write实现。 有没有替代在这里使用document.write? 我不能简单地使用窗口的原因是它在一个视图内部,在一个主视图页面内呈现。 窗口无法正确获得嵌套区域宽度。

该地区几乎就在这里:

  
AREA

AREA不了解任何其他div。

这刚刚发生在我身上,我记得你的问题:脚本代码可以找到它所在的脚本块,因此你可以从那里遍历DOM。 当前脚本块将是DOM中的最后一个(当代码运行时DOM仍然被解析)。

通过查找当前脚本块,您可以找到其父元素,并在任何位置添加新元素:

        
before script block after script block

http://jsfiddle.net/gFyK9/2/

请注意,“蓝色文本”范围将插入“脚本块后”范围之前。 那是因为在调用appendChild ,DOM中不存在“after”跨度。


然而, 有一种非常简单的方法可以使这种失败 。

这种方法别无选择。 这是脚本可以找到嵌套元素宽度的唯一方法,而不需要知道它所加载的DOM的任何内容。

适当使用时使用document.write()是合法的。 虽然向DOM添加新元素是可取的,但它并不总是可用的选项。

如果你知道它是哪个子元素,你可以在jquery中使用param nth子元素。 否则你需要用each()遍历它们

像这样创建和追加孩子:

 var el = document.createElement('div'); el.id='id'; document.body.appendChild(el); 

但是我不确定你想要做什么来获得任何宽度,它可能会返回0。