【问题标题】:Is it possible to manipulate DOM in node js?是否可以在节点 js 中操作 DOM?
【发布时间】:2020-10-25 20:12:48
【问题描述】:

我使用 vanilla js 和 ajax 以及 DOM 操作构建了一个随机引用应用程序,并且想知道我是否可以使用 node/express 在后端执行 js 位。但是我似乎无法弄清楚是否可以通过 NODE JS 完成 DOM 操作(例如在单击按钮时生成新报价)?

【问题讨论】:

  • 您可以创建一个服务器来处理请求并发送响应,但在 Node.js 中无法完成 DOM 操作,它不在浏览器中运行

标签: javascript html css node.js ajax


【解决方案1】:

您可以使用诸如 libxmljs 或 Cheerio 之类的库将 HTML 解析为带有 Node.js 的 DOM,然后您可以操纵结果。

您不能使用在 Node.js 中运行的代码来操作 浏览器 构建的 DOM,或者直接处理对浏览器中呈现的按钮的点击,因为按钮和 DOM 都会在浏览器中而不是在 Node.js 程序中。

【讨论】:

    【解决方案2】:

    DOM 不是 JS 的一部分。它是 HTML 的一部分,因此需要浏览器的上下文才能使其可用。

    您想要做的是在浏览器中继续您的 DOM 操作并对您的节点后端进行 API 调用。这将使用 the fetch API 之类的东西来代理数据,然后通过为您的应用程序适当地更新 DOM 来响应数据。

    【讨论】:

      【解决方案3】:

      您可以尝试使用一些模板渲染语言,例如(ejs、handlebars...)来使用您的 vanilla javascript 代码。

      您可以使用许多模板引擎操作来生成服务器端渲染您的页面。 使用模板引擎,您可以在提供给客户端之前提供 html 并操作 DOM。

      【讨论】:

        【解决方案4】:

        首先要区分什么是dom,什么是node。

        1.DOM

        表示在浏览器中运行,需要三个类型的文件

        • js
        • CSS
        • html

        2.节点

        它是一种编程语言,一种工具,看起来像 javascript。您不能在浏览器中运行节点。但是您可以通过节点编码创建html/css/js文件,也可以通过服务器框架(例如节点快递)返回它们

        3.我的建议

        如果您真的想在 node express 中编写一些代码,并进行一些 DOM 操作。 试试:

        • SSR(服务器端渲染)
        • 在 ejs 文件或其他一些服务器端 html 模板中编写 DOM 代码
        • 通过编写服务器 api 返回您的页面(Express 是一个不错的选择)

        【讨论】:

        • "它是一种编程语言,一种工具,看起来像 javascript。" ——不,不是。 JavaScript 是一种编程语言。 Node.js 是 JavaScript 程序运行的运行时环境。
        • 感谢指正,确实不够准确
        【解决方案5】:

        嗯,这里 Node/Express 是一个后端工具,而您的浏览器(运行 vanilla JS 的地方)是一个前端。

        后端可以以HTML/JSON/XML 甚至纯文本的形式生成输出!但同样的,由于我们不能改变函数返回的值,所以后端一旦输出就不能改变。

        这里使用了前端工具,它们能够更改 DOM,在您的情况下是 vanilla JS。

        因此,一种方法是从后端一起获取新资源,或者更聪明的方法是只获取要更改的报价(通过在同一后端创建 REST API)

        所以你需要一些像 /page/quotes 这样返回 HTML 页面的路由

        还有一些类似/api/random_quote 的路由可能会返回 JSON 格式的随机引用。您可以使用 fetch 之类的方式从前端 JS 调用

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-01-22
          • 2013-06-17
          • 2017-12-28
          • 1970-01-01
          • 2021-09-18
          • 1970-01-01
          • 2012-04-01
          • 2017-04-27
          相关资源
          最近更新 更多