以下代码在DartPad中按预期工作,如下所示:
void main() {
Element e = querySelector('table');
String someValue = 'hello, world';
int anotherValue = 23958;
Element row = new Element.tr()
..appendHtml('''
<td>$someValue</td>
<td>$anotherValue</td>
''');
e.append(row);
}
DartPad
但是,当我使用dart2js(
dart2js -c -o app.js app.dart
)编译相同的代码并在同一页面上运行它时,创建的<td>
完全被删除,最终得到:<table>
<tr>hello, world 23958</tr>
</table>
当实际的.dart文件与Dartium(v39.0.2171.0 x64)在
<script src="...">
中使用时,会发生相同的问题。我正在使用Dart v1.11.1。一些测试:
..appendHtml('''
<td></td>
<td>hi</td>
''');
产量:
<table>
<tr>hi</tr>
</table>
这与上面相同:
..appendHtml('<td>hi</td>');
我可以获得它给我想要的东西的唯一方法是:
..append(new Element.td()..text = someValue)
..append(new Element.td()..text = anotherValue.toString());
最佳答案
Dart 1.11更改了appendHTML来清理HTML输入。
为避免这种情况,您可以通过不执行任何操作的消毒剂。
class MySanitizer implements NodeTreeSanitizer {
void sanitizeTree(Node node) {}
}
document.body.appendHtml('<td>fish</td>', treeSanitizer: new MySanitizer());
关于javascript - appendHtml()不会附加完整的HTML-Dart,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31264654/