Nodejs作为后端语言,直接进行DOM操作是违背分离原则的。
但如果是个人的小网站,稍微灵活一点也没有坏处不是。
这里介绍的是cheerio这个插件,是基于jquery实现并稍有精简,目的是为nodejs提供像jquery一样的dom操作
ps:本来jsdom也是一种选择,但可惜最新版本的jsdom不再支持nodejs
下面看一个例子:
//这个方法从filelist.txt里面读出文件名,将其添加到index.html中类为listselect的select标签下
function getFileList(){
var content = fs.readFileSync('./index.html');
$ = cheerio.load(content);
$('select.listselect').empty();//避免重复,加载前先清空标签下所有子标签
lineReader.eachLine('./filelist.txt',function(line,last){
//lineReader是一个按行读取文件的nodejs插件,可自行安装
var file = line.substr(line.lastIndexOf(' ')+1);
$('select.listselect').append('<option class="listoption" value='+file+'>'+file+'</option>');
if(last){
fs.writeFile("./index.html", $.html(),function(err){
if(err) throw err;
console.log("Saved");
});
return false;
}
});
关于为什么会有
$ = cheerio.load(content);
这样的写法确实很让人纠结,必须是$这个符号不然就会出错,我个人理解成为了看起来和jquery里的选择器保持一致而特意这样写的
更多操作可以看
https://npmjs.org/package/cheerio
官方文档或者下面的翻译文档
https://cnodejs.org/topic/5203a71844e76d216a727d2e