如何在 Node.js 中使用 JQuery 选择器
我正在尝试从硬盘驱动器中的 HTML 文件中提取电子邮件信息。
如果我在 firefox 中加载文件并运行 jQuerify bookmarklet 我可以成功使用以下选择器/函数
window.jQuery("a.iEmail").each(function(el) {
console.log(window.jQuery(this).attr('href'))
});
但是在 Node.js 中使用它不起作用
var document = require("jsdom").jsdom(),
script = document.createElement("script"),
fs = require('fs');
fs.readFile('file_1.html', 'utf-8', function(err, data){
if (err) {
throw err;
}
// This output the document
//console.log(data)
var window = document.createWindow(data);
script.src = 'http://code.jquery.com/jquery-1.4.2.js';
script.onload = function() {
console.log(window.jQuery.fn.jquery);
// outputs: 1.4.2
//console.log(window.jQuery);
/*
* This line works if i load the local file in firefox and execute
* the jQuerify bookmarlet
*/
window.jQuery("a.iEmail").each(function(el) {
console.log(window.jQuery(this).attr('href'))
});
};
document.head.appendChild(script);
});
I'm trying to extract email info from HTML files in my hard drive.
If I load the file in firefox and run jQuerify bookmarklet I can use successfully the following selector/function
window.jQuery("a.iEmail").each(function(el) {
console.log(window.jQuery(this).attr('href'))
});
But using this in Node.js is not working
var document = require("jsdom").jsdom(),
script = document.createElement("script"),
fs = require('fs');
fs.readFile('file_1.html', 'utf-8', function(err, data){
if (err) {
throw err;
}
// This output the document
//console.log(data)
var window = document.createWindow(data);
script.src = 'http://code.jquery.com/jquery-1.4.2.js';
script.onload = function() {
console.log(window.jQuery.fn.jquery);
// outputs: 1.4.2
//console.log(window.jQuery);
/*
* This line works if i load the local file in firefox and execute
* the jQuerify bookmarlet
*/
window.jQuery("a.iEmail").each(function(el) {
console.log(window.jQuery(this).attr('href'))
});
};
document.head.appendChild(script);
});
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我现在知道问题是什么了。
html 数据必须在文档创建调用中传递,因此代码如下所示:
I now know what the problem is.
The html data, must be passed in the document creation call, so the code look like this:
在 Node.js 中使用 jquery 很困难,但这是可能的。这是 jsdom 的实现:
有关详细信息,请参阅:
http:// /blog.nodejitsu.com/jsdom-jquery-in-5-lines-on-nodejs
或:
我可以将 jQuery 与 Node.js 一起使用吗?
It's tough to use jquery with node.js but it's possible. Here's an implementation with jsdom:
For more info see:
http://blog.nodejitsu.com/jsdom-jquery-in-5-lines-on-nodejs
or:
Can I use jQuery with Node.js?
使用 Cheerio
Cheerio 是核心 jQuery 的服务器实现,非常适合使用选择器。
您可以轻松使用 each 函数:
完整示例:
Using Cheerio
Cheerio is a server implementation of core jQuery that is perfect for using selectors.
You can easily use the each function:
Full example:
jsdom
以“官方”方式支持jQuery
。简单代码:
https://github.com/tmpvar/jsdom#easymode
jsdom
supportsjQuery
with "official" way.Simple code:
https://github.com/tmpvar/jsdom#easymode