2013-10-19 54 views
4

在镖,在镖解析HTML字符串,DOM

我想解析字符串“<!DOCTYPE HTMT><html><head></head><body>....</body></html>”到DOM,这样我可以操纵产生的DOM元素。我知道在JQuery中,有$ .parseHTML来处理它。但我在镖里找不到类似的东西。 谢谢。

(我曾经尝试html2lib,但输出文件不能使用query(".classname")选择。)

+2

我在twitter上询问了Vyacheslav Egorov,他给出了这个答案:[https://api.dartlang.org/docs/channels/stable/latest/dart_html/DocumentFragment.html#html],DocumentFragment。 – xhg

回答

2

尝试html5lib。它是100%纯粹的飞镖,所以你应该设置。

根据HTML的性质,您也可以考虑Dart的XML解析器,如dart-xml

+0

谢谢,我试过了,但是我不能使用'query(“。classname”)'来选择里面的元素。 – xhg

+0

也许他们从未与dart:html保持兼容性,正如他们承诺的那样。抱歉。最简单的做法可能就是使用JQuery来完成您的Dart应用程序中的整个解析/操作过程,方法是使用js-interop。 https://www.dartlang.org/articles/js-dart-interop/ – Vidya

+0

也许是因为它仍然处于beta版本。谢谢〜 – xhg

3

您可以通过解析HTML文本创建一个元素:

new Element.html("YOUR HTML STRING HERE"); 

看到Dart: Up and Running CH03

编辑
您可能需要通过一个NodeValidator得到渲染等的整个文本:

NodeValidator nodeValidator = new NodeValidatorBuilder() 
    ..allowTextElements(); 
    // ..allowHtml5() 
    // ..allowElement('Button', attributes: ['ng-disabled']); 

new Element.html("YOUR HTML STRING HERE", validator: nodeValidator); 

如果您运行该应用程序,则会收到类似“元素/属性xxx从...中删除”的日志消息,如果某些文本未被NodeValidator接受。

+0

太棒了!你是男人! –

+0

似乎很酷!我会尝试 – xhg