2012-03-18 156 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