【问题标题】:Using Document object in nodejs在 nodejs 中使用 Document 对象
【发布时间】:2016-12-09 11:51:27
【问题描述】:

我还是 javascript 和 node.js 的新手,我试图完成一些事情,但我遇到了错误 ReferenceError: Document not defined

在单独的文件中给出以下代码:

索引.html:

<!DOCTYPE html>
<html>
<head>
    <title>My Test Website</title>
    <script type="text/javascript" src="script.js"></script>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <p id="para1"> Some text here</p>
</body>
</html>

还有 script.js:

function getParagraphContents() {
    var paragraph = document.getElementById("para1");
    var temp = paragraph.textContent;
    console.log(temp);
}

所以我的问题是我希望能够从命令行运行命令node script.js,但不断收到错误消息。我一直在阅读其他答案和文档,但似乎没有什么是正确的答案。有什么建议?附言我在 mac osx 上使用终端并正确安装了节点和 npm。

谢谢。

【问题讨论】:

  • 你为什么需要那个?
  • 你不能在 Node.js 中运行那个客户端脚本,这不是它的工作方式,那个脚本是给浏览器的,而不是服务器的。
  • script.js 设计用于在浏览器中运行并在当前页面的 HTML 上进行操作。运行node script.js 并没有任何意义。虽然您可以找到将 HTML 文档加载到节点中并为您提供它们的 DOM 表示的库,然后您可以在其上运行一些类似浏览器的脚本,但这不是您在这里尝试的,因为没有与之关联的文档script.js 在所有。它本身就是一个脚本。所以运行node script.js 就像是一个应用程序。你需要解释你想从节点完成什么。

标签: javascript html css node.js macos


【解决方案1】:

script.js 是一个旨在在浏览器中运行的脚本,而不是在 node.js 中。它旨在对当前网页进行操作,并使用document 对象来访问该页面。

node.js 执行环境与浏览器不同。例如,没有浏览器中的“当前页面”概念,因此也没有浏览器中的全局documentwindow 对象。

所以,这一切都解释了为什么尝试运行 node script.js 不起作用。没有全局 document 对象,因此您的脚本会快速生成错误并退出。


如果您真的不了解在浏览器中运行脚本与在 node.js 环境中运行脚本之间的区别,我们无法从您的问题中真正看出,这就是您需要解释的全部内容,或者您​​是否真的了解想要在 node.js 中操作 HTML 文档?

可以在 node.js 中对 HTML 页面进行操作。通常的方法是获取一个像 jsdom 这样的 HTML 解析库。然后,您可以使用该库加载一些 HTML 页面,它将创建一个模拟的浏览器 DOM,并使您可以使用 document 对象之类的东西,以便您可以在 HTML 文档上执行类似浏览器的脚本。

【讨论】:

  • 感谢 jfriend00,这为我解决了问题,并且肯定会签出 jsdom。我只是不确定 node js 到底是什么。我了解脚本在浏览器中的工作方式,但不确定它们在节点中的工作方式,因此我也会对此进行研究。
猜你喜欢
  • 2021-03-06
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
  • 2019-12-19
  • 1970-01-01
  • 2018-03-15
相关资源
最近更新 更多