2013-05-08 38 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