你能帮我通过嵌套类构建一个html文档吗?
我的主要目标是用html标记构建一个字符串,如下所示
<html>
<div>
<p>123</p>
<div>
<div>
123
<a>123</a>
</div>
</div>
</div>
</html>
我有一个类DOMElement
,它包含以下字段:
class DOMElement {
TagName :string;
TextContent: string | null;
Attributes: string[];
AttributesValue: string[];
Children: DOMElement[]; // stored nested tags;
}
所以我已经有了这个类的文档的DOM结构,我想把它返回到标记中。
为此,我使用了一个错误的方法:
public convertToHtml (domTree: DOMElement, str: string = ''): string {
if (domTree.Children.length != 0) {
domTree.Children.forEach((x) => {
let attributes = '';
x.Attributes.forEach((attr, index) => {
attributes += attr + '=' + `${x.AttributesValue[index]}"`;
});
if (x.Children.length != 0) {
x.TextContent = '';
}
str += `<${x.TagName.toLowerCase()} ${attributes}>${this.convertToHtml(
x,
str,
)}${x.TextContent}</${x.TagName.toLowerCase()}>`;
});
}
return str;
};
如何修复这个递归,使其返回一个标记结构?或者有没有其他的选项来创建一个嵌套对象的标记?
2条答案
按热度按时间e37o9pze1#
我认为代码中有几个错别字/小错误。下面是一个工作示例,除了错别字修复之外没有任何真实的更改:
Playground链接
额外注意事项/建议/提示
class
对比interface
DOMElement
是一个class
,但它也可能是一个interface
或type
。在这种情况下,看起来你并没有真正将它用作class
,所以TS类型可能更好。默认参数值类型推断
您使用了
str: string = ''
作为参数,但是当您指定''
作为默认值时,TS可以推断出它已经是一个字符串。nsc4cvqm2#
这就是我如何处理这个问题。我有一个函数,我称之为'createHTMLElement'。
我创建的JSON对象看起来像这样:
我这样称呼它:
返回的ele将是一个dom对象。它可以接受一个数组(作为'children'传递)来一次添加多个,而不是传递一个子对象。也许这个,或者一些调整过的版本,可以帮助你得到你想要的。