为什么不能使用document.write来使用Dom-scripting加载模块?

时间:2010-11-20 15:56:02

标签: javascript

this question中,我得到了以下答案:

查看Google的地图脚本,它无法加载Geocoder模块,因为它使用document.write来执行此操作,这个方法必须在解析时从HTML文档中包含的方法运行,而不是使用DOM脚本导入正如你在这里做的那样。

哪个方法必须在pare时从包含在html中运行?我该怎么做呢? 使用DOM脚本导入什么?我如何识别DOM脚本?

我对javascript很新,我真的不明白这里的参考。

2 个答案:

答案 0 :(得分:3)

isDom脚本是指处理已经加载的文档,并操纵“DOM元素”(DOM =“文档对象模型”......网页组件的javascript表示)。您可以添加和删除元素,并操纵其属性(如样式和内容)。

与改变html文本本身相反,在使用document.write将其转换为元素之前。 document.write仅在页面从文本转换为网页组件时才开始工作。这是“旧方式”,因为在过去的javascript中,它是唯一的做事方式。有些情况下它仍然有用,但一般来说这些日子都可以避免。

dom脚本示例:

var elem = document.getElementById("someelement");
var childElem = document.createElement ("DIV");
childElem.innerHTML = "this is a <i><b>test</b></i>";
elem.appendChild (childElem);

请注意,使用“innerHTML”是一种常见的快捷方式,有点处于中间位置。它用于页面后加载,但它通过提供文本html代码来工作。根据具体情况,它可能会或可能不会被视为“dom脚本”。

答案 1 :(得分:2)

document.write是一种旧方法,可以在脚本所在的位置将HTML加载到页面中,然后加载。出于这个原因,它通常用在JavaScript“小部件”中,可以复制并粘贴到网页中。但是,如果页面已完成加载,它所做的就是开始创建一个包含该HTML的新页面。

<div id="foo"> 
    <script type="text/javascript"> 
        document.write("<h1>Main title</h1>") 
    </script> 
</div>

这与jQuery提供的功能或它使用的底层DOM方法形成对比,在页面加载后必须将其称为

// The jQuery way
$(document).ready(function() {
    $('#foo').append('<h1>Main title</h1>'); 
});

// The plain JS way
window.onload = function() {
    var h1 = document.createElement('h1');
    h1.appendChild(document.createTextNode('Main title'));
    document.getElementById('foo').appendChild(h1);
};

如果根本无法更改窗口小部件(例如它由第三方提供),并且您必须(例如)从jQuery加载窗口小部件,则可以{{ 3}}在加载它之前做你想要的。

请注意,当页面上有多个小部件时,为了使其正常工作,您必须确保在尝试加载第二个小工具之前已完全加载第一个小工具。