【问题标题】:'Node' is undefined. How can we define in application level?“节点”未定义。我们如何在应用程序级别定义?
【发布时间】:2015-05-15 11:59:51
【问题描述】:

我在变量范围方面遇到了一些问题。如果我们在一个 js 文件中定义,我们如何在另一个 js 文件中使用(这里我的意思是说如果我们想在整个应用程序中使用一个变量)?我们能做到吗?

示例:在我们的 IE(IE-8 和更低版本的 IE)中,我们面临节点类型的问题。我们在这么多 javascript 文件中使用常量示例:Node.ELEMENT_NODE 这给少数浏览器带来了问题(“节点”未定义) 我们必须在所有文件中用“1”替换这个常量。我们可以在我们的起始 html 文件中用

定义,而不是在所有地方替换它(这么多文件)

下面的示例在我们的起始 html 文件(即 index.html)中,我们可以在任何其他 javascript 文件中使用 Node.ELEMENT_NODE 吗?它是否会影响我们使用 Node.ELEMENT_NODE 的所有其他 javascript 文件:

<script type="text/javascript">
    if (!window.Node){
        Node = {  
            ELEMENT_NODE                :  1,
            ATTRIBUTE_NODE              :  2,
            TEXT_NODE                   :  3,
            CDATA_SECTION_NODE          :  4,
            ENTITY_REFERENCE_NODE       :  5,
            ENTITY_NODE                 :  6,
            PROCESSING_INSTRUCTION_NODE :  7,
            COMMENT_NODE                :  8,
            DOCUMENT_NODE               :  9,
            DOCUMENT_TYPE_NODE          : 10,
            DOCUMENT_FRAGMENT_NODE      : 11,
            NOTATION_NODE               : 12
        };
    }

【问题讨论】:

  • 如果你尝试你的建议,它会产生错误吗?
  • 它仅在该文件(例如 index.html)中工作。如果我在另一个文件(another.js)中使用相同的变量,则不会应用此值。我收到错误,因为“节点”未定义。只想在一个文件中声明并希望在所有文件中使用。

标签: javascript html internet-explorer scope global-variables


【解决方案1】:

创建一个放置 javascript 代码的文件。

// your-script.js
if (!window.Node){
    Node = {  
        ELEMENT_NODE                :  1,
        ATTRIBUTE_NODE              :  2,
        TEXT_NODE                   :  3,
        CDATA_SECTION_NODE          :  4,
        ENTITY_REFERENCE_NODE       :  5,
        ENTITY_NODE                 :  6,
        PROCESSING_INSTRUCTION_NODE :  7,
        COMMENT_NODE                :  8,
        DOCUMENT_NODE               :  9,
        DOCUMENT_TYPE_NODE          : 10,
        DOCUMENT_FRAGMENT_NODE      : 11,
        NOTATION_NODE               : 12};
    }
}

然后,在您网站的每个页面上添加这一行:

<script src="your-script.js"></script>

最好将这一行放在&lt;/body&gt;(结束标记)之前。这将在加载其他所有内容后执行 javascript。 当然,你仍然可以把这条线放在你想要的地方。

注意:这里的文件名为“your-script.js”,但你可以随意命名。

这将包含您所有页面中的代码。然后可以从任何地方访问它。


如果您对此解决方案仍有疑问,请等待所有脚本加载完毕后再执行任何代码:

window.onload = function ()
{
    // Javascript code goes here
}

【讨论】:

  • 非常感谢您的建议。有没有其他方法不修改其他文件只是在单个文件中声明并且应该反映在所有其他文件中。 (正如您建议在所有文件中添加:)。如果我们在一个文件中声明它可以反映在所有文件中吗?
  • 如果您使用的是模板系统,请在模板中添加该行。如果没有,您必须手动添加它以使代码在每个页面上都可以正常工作,否则将无法正常工作。
  • 其实目前还没有模板。我尝试了你的建议(window.onload = function ()...)。没有运气。谢谢。
  • 第二种解决方案仅适用于您在所有页面中加载 javascript 但代码在加载其他代码之前执行。
【解决方案2】:

确保脚本位于每个页面的顶部。忘记将它放在您的结束正文标记之前或将其放在 onload 事件中。创建具有简单属性的普通 Javascript 对象在加载页面时不会引起明显的差异。

【讨论】:

    猜你喜欢
    • 2021-06-04
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 2012-02-20
    • 2019-04-08
    • 2021-12-05
    • 2020-07-31
    相关资源
    最近更新 更多