为什么 addEventListener 在 nodejs 的 jsdom 模块中不起作用
Why addEventListener doesn't work in jsdom module for nodejs
我使用下面的代码在点击页面上的元素后调用一些东西
var http = require('http');
var fs = require('fs');
var jsdom = require('jsdom');
http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/html; charset=utf8'});
var document = new jsdom.JSDOM('<!doctype html><html><head></head><body><p>Text</p></body></html>').window.document;
document.getElementsByTagName('p')[0].addEventListener('click', function() {
alert('OK');
});
var page = '<!doctype html><html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>';
res.end(page);
}).listen(80, 'localhost');
但是如果我点击该段落,什么也没有发生
我阅读了 link 的答案,但我不明白如何解决我的问题
您正在挂钩 服务器 上的 click
处理程序,但您正在单击 客户端 上的元素.
相反,您需要将脚本代码发送到连接浏览器呈现的 DOM 元素上的事件处理程序的客户端,以处理点击并显示警报(这也是客户端事物)。 (这意味着您不需要 JSDom;那是为了进行 DOM 操作——比如网络抓取——服务器端。)
我使用下面的代码在点击页面上的元素后调用一些东西
var http = require('http');
var fs = require('fs');
var jsdom = require('jsdom');
http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/html; charset=utf8'});
var document = new jsdom.JSDOM('<!doctype html><html><head></head><body><p>Text</p></body></html>').window.document;
document.getElementsByTagName('p')[0].addEventListener('click', function() {
alert('OK');
});
var page = '<!doctype html><html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>';
res.end(page);
}).listen(80, 'localhost');
但是如果我点击该段落,什么也没有发生
我阅读了 link
您正在挂钩 服务器 上的 click
处理程序,但您正在单击 客户端 上的元素.
相反,您需要将脚本代码发送到连接浏览器呈现的 DOM 元素上的事件处理程序的客户端,以处理点击并显示警报(这也是客户端事物)。 (这意味着您不需要 JSDom;那是为了进行 DOM 操作——比如网络抓取——服务器端。)