2017-06-20 26 views
-1

令人难以置信的困惑 - 这里新增了Node JS。我正在尝试在index.js中更改DOM元素(通过类,名称等),我的Node js主文件。无法更改节点JS中的DOM元素? Jsdom?

我读模块jsdom,理应可以得到/改变html元素,因为在节点这不起作用文档:var cb = document.getElementsByName('field206451')[0];

以下的其他问题和安装jsdom,我现在得到的错误:

TypeError: jsdom.env is not a function 

在尝试这样的:

app.get('/changePage', function (request, response) { 

fs.readFile(__dirname +"/views/pages/index.ejs", 'utf8', function(error, data) { 
    jsdom.env(data, [], function (errors, window) { 
     var $ = require('jquery')(window); 
     $("p").each(function() { 
      var content = $(this).text(); 
      console.log(content); 
      $(this).text(content + " modified!"); 
     }); 

    }); 
}); 

    response.end("works"); 
}); 

我不知道我在做什么在这里。为什么它不能识别js dom,我怎样才能改变节点中p的值?

附注 - 我的“HTML”文件实际上是一个index.ejs

+1

你是否...试图改变已经呈现在浏览器中的html,从node.js?因为这不是如何工作的。这不是如何工作! –

回答

1

Node.js的是一个开源,跨平台执行JavaScript代码的服务器端JavaScript的运行时环境。

以前,JavaScript主要用于客户端脚本,其中用JavaScript编写的脚本嵌入到网页的HTML中,并由用户的Web浏览器中的JavaScript引擎在客户端运行。

的Node.js使得可以用于服务器端脚本的JavaScript,并运行脚本,服务器端之前的页面发送到用户的Web浏览器来制作动态网页内容。

Reference Link

如上所述,目的是制作动态网页内容的页面被发送之前,用户的浏览器还没有

因此,该页面还没有达到客户端的浏览器,所以DOM尚未初始化,因此文档在该服务器端脚本中没有任何内容。

我希望清除你的困惑。你在环境不适合的环境中做某事。

+0

好的。得到它了。但是,如果用户在文本字段中键入,命中输入,并且该文本应该出现在文档中的标签中,该怎么办?是不是重新加载页面?如果Node JS不能完成这个,那么如何做到这一点?额外的js文件? – skyguy

+0

对不起,新框架和所有这些。 – skyguy

+0

如果您想获得这种行为,您可以在请求中发送参数,也可以在服务器呈现页面中输入显示在标签中的值。 更好的方法是使用像Angular JS这样的前端JS框架来达到这个目的。它们都有趣地结合在一起。 –