我想使用node fs命令行工具将代码段添加到html文件中。 我看到了这个解决方案how to append to a file on particular position using node.js?,但它使用了附加到文件的位置。
我有这个html代码段
<html><body><h1>hello world</body></html>
我想追加
<script>console.log('hello world')</script>
在关闭身体标签之前。 我希望输出像这样
<html><body><h1>hello world</h1><script>console.log('hello world')</script></body></html>
答案 0 :(得分:2)
为什么不使用正则表达式?
fs = require('fs')
fs.readFile('./test.html', 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
var toPrepand = "<script>console.log('hello world')</script>";
data = data.replace(/\<\/body>/g, toPrepand + '</body>');
console.log(data);
});
您不必考虑在</body>
标记之前放置的位置 - 因为您已经说过了。
之后只需将新数据写入该HTML文件即可。
如果您还想知道如何直接编写文件:
var fs = require('fs')
fs.readFile('./test.html', 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
var toPrepand = "<script>console.log('hello world')</script>";
var result = data.replace(/\<\/body>/g, toPrepand + '</body>');
fs.writeFile('./test.html', result, 'utf8', function (err) {
if (err) return console.log(err);
});
});
有很多选项可以做 - 找到位置或使用HTML parser或简单地用字符串替换该字符串。
答案 1 :(得分:1)
您可以使用简单的字符串操作来实现此目的:
var initialString = '<html><body><h1>hello world</body></html>';
var insert = '<script>console.log("hello world")</script>';
然后使用indexOf找到位置:
var pos = initialString.indexOf('</body>');
切割并连接字符串:
var output = [initialString.slice(0, pos), insert, initialString.slice(pos)].join('')
当然使用输出: - )
如果你想要更具伸缩性的东西,你也可以看看Node的任何HTML解析器/虚拟DOM实现(比如jsdom https://github.com/tmpvar/jsdom)
答案 2 :(得分:0)
我想使用&#39; cheerio&#39;节点包来做。 https://github.com/cheeriojs/cheerio
这非常有用,就像使用jQuery一样。