2012-03-18 154 views
0

我的目标是将节点不一次添加到NodeList,而是在每次迭代中将它们添加到循环中。我查找了NodeList的类和方法,但没有发现任何有用的东西。无论如何,这样做还是我应该使用其他接口? 要做类似下面的事情,但NodeList界面没有“添加”方法。那么我如何添加项目?将节点添加到节点列表

 static NodeList tryToGetThePoint; 


    while(true) 
     { 
     . 
     . 
     . 
    if(!"script".equals(myNode.getParentNode().getNodeName())) 
{ 

tryToGetThePoint.add=myNode; 

} 
+0

@deporter当然是一个NodeList – lonesome 2012-03-18 11:43:51

+0

*“当然”*为什么有人问这是否明显?今后请谨慎使用J2SE类的正确大小写。 – 2012-03-18 11:47:16

+0

祝你好运。 – 2012-03-18 11:52:58

回答

0

关于这个关键位是:

“NodeList接口提供对节点的有序集合的抽象,没有定义或约束如何实现此集合。”

简而言之:它取决于您实施的一切。

您确定不能使用列表吗?我的意思是,这取决于这是什么?

但是,如果你确实想要实现你自己,这大概是它应该如何。

public class MyNodeList implements NodeList { 
    Node root = null; 
    int length = 0; 
    public MyNodeList() {} 

    public void addNode(Node node) { 
     if(root == null) 
      root = node; 
     else 
      root.addChild(node); 
     length++; 
    } 

    public Node item(int index) { 
     if(index < 1) return root; 
     Node node = root; 
     while(index > 0) { 
      node = node.getFirstChild(); 
      if(node == null) return node; 
      index--; 
     } 
     return node; 
    } 

    public int getLength() { 
     return length; 
    } 
} 
+0

你的例子让我有点失落 - item和getLength方法在哪里?你为什么还要实现Node?否则,我同意。 – 2012-03-18 12:04:53

+0

是的,我在那里困惑了一下自己。列梅编辑... – 2012-03-18 12:10:38

+0

固定,终于。 – 2012-03-18 12:24:09

3

你要记住,在NodeList的节点现场 - 如果你改变他们要修改底层DOM树。因此,将这些东西添加到NodeList并没有什么意义 - 你期望它们能在树中生活吗?

如果您只想要一个Node与文档无关的列表,请使用List<Node>。否则,您需要确定将节点添加到DOM树中的位置并使用常规方法。

更新:我没有注意到你声明了NodeList - 这是行不通的,除非你像Perry Monschau说的那样自己实现它。改用List<Node>

+0

哦,我明白了。是的,我想要的节点列表,但只是想知道如果NodeList也可以做到这一点。感谢您的建议:) – lonesome 2012-03-18 12:02:35

+0

是的,NodeList实际上只是各种DOM方法的返回类型。 – 2012-03-18 13:13:11