Html GWT包装表并以编程方式操作内容

Html GWT包装表并以编程方式操作内容,html,gwt,html-table,Html,Gwt,Html Table,我有一个格式良好的HTML表格(HTML文本由一个报告工具生成),我想把它变成GWT中的“可编程”表格。 我需要显示提供的内容,但我还需要检查DOM,获取表,并向行和单元格添加ClickHandler 我可以用图像做类似的事情: Html html = new HTML(htmlText); ImageElement domElement = getChildImageByTagAndId(html.getElement(), "img", "blah"); Image image = Imag

我有一个格式良好的HTML表格(HTML文本由一个报告工具生成),我想把它变成GWT中的“可编程”表格。 我需要显示提供的内容,但我还需要检查DOM,获取表,并向行和单元格添加
ClickHandler

我可以用图像做类似的事情:

Html html = new HTML(htmlText);
ImageElement domElement = getChildImageByTagAndId(html.getElement(), "img", "blah");
Image image = Image.wrap(domElement);
image.addClickHandler(...);
我的问题是:如何正确处理表

我找不到
元素的wrap()方法


注意:这个问题是在已接受答案的评论中提出的(但没有回答)。

我不知道有一种简单的方法可以用sub-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


                }


            }


        }


    }
Element table=DOM.getElementById(“someTableId”);
int numTopNodes=table.getChildNodes().getLength();
对于(int-topNode=0;topNode
你好,阿什顿,我做了更多的研究,看起来你是对的:有一种“正确的方法”可以通过FlexTable来处理它。这适用于需要对表进行完全编程访问的情况。无论如何,对于我的特殊情况,我不需要这样做。我能够用以下内容包装
元素:
TableCellElement cellElem=。。。;HTML-cellWidget=HTML.wrap(celllem);cellWidget.addClickHandler(…)。需要注意的是:
wrap()
调用在我的应用程序中工作正常,但是当我调试时,我得到一个异常“具有现有父小部件的小部件可能不会添加到分离列表”。我不知道为什么会发生这种情况。这个问题:“具有现有父窗口小部件的窗口小部件可能无法添加到分离列表”与包装已“包装”元素的子元素有关。您必须从最里面的元素开始包装,然后以自己的方式进行备份。