【发布时间】:2020-05-28 22:12:11
【问题描述】:
我有这个 html 字符串,我想修改 src 标记,以便保留值但在属性末尾附加一个字符串
修改前的HTML
<html>
<head>
<title>LDRA Testbed Results</title>
</head>
<script>
var AddTxt = true;
var TBpublish = true;
</script>
<frameset cols="206,*" marginwidth="0" marginheight="0"
FRAMEBORDER="no" BORDERCOLOR="#DEDEEF">
<frame src="./App_xyz_P_tbresults/App_xyz_P.lfm.htm" name="lFrame" NORESIZE>
<frame src="htm_idx/frontpage.htm" name="rFrame" FRAMEBORDER="no">
</frameset>
</html>
修改后的HTML
<html>
<head>
<title>LDRA Testbed Results</title>
</head>
<script>
var AddTxt = true;
var TBpublish = true;
</script>
<frameset cols="206,*" marginwidth="0" marginheight="0" FRAMEBORDER="no" BORDERCOLOR="#DEDEEF">
<frame src="./App_xyz_P_tbresults/App_xyz_P.lfm.htm:A:1" name="lFrame" NORESIZE>
<frame src="htm_idx/frontpage.htm:A:1" name="rFrame" FRAMEBORDER="no">
</frameset>
</html>
如何在 Node.js 中做到这一点
当前代码 这就是我目前使用解析器解析 html 代码的方式
var html = chunk.toString();
var temp = html;
html = parse(html);
var modifiedHTML = [];
var elementsTag = [
"<a ",
"<area ",
"<base ",
"<body ",
"<frame ",
"<iframe ",
"<img ",
"<input ",
"<link ",
"<script ",
"<audio ",
"<embed ",
"<source ",
"<track ",
"<video "
];
var elements = [
"a",
"area",
"base",
"body",
"frame",
"iframe",
"img",
"input",
"link",
"script",
"audio",
"embed",
"source",
"track",
"video"
];
for (var i = 0; i < elementsTag.length; i++) {
var count = (temp.match(new RegExp(elementsTag[i], "g")) || []).length;
for (var j = 0; j < count; j++) {
var elementAttr = html.querySelector(elements[i]);
if (elementAttr != null) {
// console.log(elementAttr);
if (Object.keys(elementAttr.attributes).length > 0) {
Object.keys(elementAttr.attributes).forEach(attribute => {
if (attribute == "src" || attribute == "href") {
var attributeVal = elementAttr.attributes[attribute];
// console.log(attributeVal[j]);
attributeVal = attributeVal + `:${project_name}:${type}`;
elementAttr.setAttribute(attribute, attributeVal);
}
});
}
modifiedHTML.push(elementAttr.outerHTML);
}
}
}
console.log(modifiedHTML);
输出:
[
[0] '<frame src="./App_xyz_P_tbresults/App_xyz_P.lfm.htm:TEST:static_analysis_report1:TEST:static_analysis_report1" name="lFrame" NORESIZE></frame>',
[0] '<frame src="./App_xyz_P_tbresults/App_xyz_P.lfm.htm:TEST:static_analysis_report1:TEST:static_analysis_report1:TEST:static_analysis_report1" name="lFrame" NORESIZE></frame>'
[0] ]
【问题讨论】:
-
对节点使用 HTML 解析器:npmjs.com/package/node-html-parser
-
我做了,但是当我选择一个框架标签时,它总是返回第一个标签,所以我无法在第一个标签之后更改标签的 src
-
然后发布代码...
-
我做了更改检查一下
标签: javascript html node.js