2013-05-08 40 views
2

我擁有良好的格式化HTML表格(HTML文本是由報告工具生成的),我希望把它變成一個「可編程」表中GWT。 我需要顯示提供的內容,但我還需要檢查DOM,獲取表格,並將ClickHandler添加到行和單元格中。GWT換表和操作內容編程

我能夠做的圖片類似的東西:

Html html = new HTML(htmlText); 
ImageElement domElement = getChildImageByTagAndId(html.getElement(), "img", "blah"); 
Image image = Image.wrap(domElement); 
image.addClickHandler(...); 

我的問題是:什麼是用表來做到這一點的正確方法是什麼?

我找不到<table>,<tr><td>元素的wrap()方法。

注意:在接受的答案here的評論中詢問(而未回答)此問題。

回答

0

我不知道用子tr和td元素包裝現有表的簡單方法。

考慮到您依賴於第三方工具的限制,我建議嘗試構建一個自定義表分析器,該分析器將解析現有的表,構建FlexTable,然後用新的FlexTable替換現有的表。

醜,因爲這是,我不知道有更好的辦法...

這可能取決於表究竟是怎麼設置的,但您可以嘗試的東西,如下面的例子來玩弄經過現有的表,並使用getNodeValue()建FlexTable的內容....

Element table = DOM.getElementById("someTableId"); 

    int numTopNodes = table.getChildNodes().getLength(); 

    for(int topNode = 0; topNode < numTopNodes; topNode++){ 

     Node top = table.getChildNodes().getItem(topNode); 
     System.out.println("Top Node: "+top); 


     for(int subNode = 0; subNode < top.getChildCount(); subNode ++){ 

      Node sub = top.getChildNodes().getItem(subNode); 
      System.out.println("Sub Node: "+sub); 

      for(int rows = 0; rows < sub.getChildCount(); rows ++){ 

       Node row = sub.getChildNodes().getItem(rows); 
       System.out.println("Row: "+row); 


       for(int cells = 0; cells < row.getChildCount(); cells++){ 

        Node cell = row.getChildNodes().getItem(cells); 

        System.out.println("CELL: "+cell.getNodeValue()); // use value to build to build a new FlexTable 


       } 


      } 


     } 


    } 
+0

嗨阿什頓,我做更多的研究,它看起來像你是正確的:有「正確的方式」來處理它是通過'FlexTable'。這是爲了當你需要完全編程訪問表格。無論如何,對於我的特殊情況,我不需要那樣做。我可以用這個來包裝''元素:'TableCellElement cellElem = ...; HTML cellWidget = HTML.wrap(cellElem); cellWidget.addClickHandler(...);'。注意:'wrap()'調用在我的應用程序中可以正常工作,但是當我調試時,我得到一個異常「具有現有父窗口小部件的窗口小部件可能不會添加到分離列表中」。我不知道爲什麼會發生這種情況。 – romanws 2013-06-11 14:03:12

+0

此問題:「具有現有父級窗口小部件的窗口小部件可能無法添加到分離列表」與包裝已包裝元素的子項有關。你必須從最內層的元素中包裝,然後回到原來的狀態。 – 2013-06-11 19:25:17