首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >html5lib飞镖。按类选择器查询抛出异常

html5lib飞镖。按类选择器查询抛出异常
EN

Stack Overflow用户
提问于 2013-12-01 19:18:59
回答 2查看 456关注 0票数 0

我试图通过选择器.nav获得类导航的元素。因此,lib抛出异常:

只实现类型选择器。

代码示例:

代码语言:javascript
复制
import 'package:html5lib/parser.dart';

void main() {
  String html = '''
    <html>
    <head><title>Some title</title></head>
    <body>
    <div class="nav">Some nav content</div>
    </body>
    </html>
  ''';
  var doc = parse(html);

  print(doc.query('.nav'));
}

控制台输出:

代码语言:javascript
复制
Breaking on exception: UnimplementedError: only type selectors are implemented
Unhandled exception:
UnimplementedError: only type selectors are implemented
#0      Node._typeSelector (package:html5lib/dom.dart:269:7)
#1      Node.query (package:html5lib/dom.dart:249:62)
#2      main (/home/hello/dart/test/bin/simple_exp.dart:14:18)
#3      _startIsolate.isolateStartHandler (dart:isolate-patch/isolate_patch.dart:190)
#4      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:93)

怎么啦?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-02 04:25:38

完全CSS选择器匹配尚未实现。

根据您的用例,您可能能够匹配类型(标记名),然后使用元素的class属性筛选结果。

下面是如何做到这一点的一个例子:

代码语言:javascript
复制
  var el = doc.queryAll('div').where((el) => 
      el.attributes.keys.contains('class') &&
        el.attributes['class'].split(' ').contains('nav')).first;

希望不久会有人实现查询选择器匹配支持--因为对于带有大量div标记的文档来说,这种工作效率很低。

另一种解决方案是自己遍历--如下所示:

代码语言:javascript
复制
queryClass(Node element, String className) {
  for (var node in element.nodes) {
    if (node is! Element) continue;
    if (node.attributes.keys.contains('class') 
        && node.attributes['class'].split(' ').contains(className)) {
      return node;
    }
    var result = queryClass(node, className);
    if (result != null) return result;
  }
  return null;
}

main() {
   var doc = parse(...);
   var el = queryClass(doc, 'nav');
   print(el);
}
票数 3
EN

Stack Overflow用户

发布于 2013-12-01 20:35:26

通过查看html5lib解析器的代码,您可以看到查询函数仅用于类型选择器(例如: div、head等)。源代码中有一个注释指出,而且抛出的异常也是非常显式的。

对于您的情况,一个可能的解决方案是使用queryAll方法返回所有div并遍历它们,直到您找到有相应类的一个(或那个)。我知道到目前为止这不是理想的解决方案,但可能有效。

希望能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20316122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档