从 GWT UIBinder 中移除父元素

Remove parent element from GWT UIBinder

我有一个 GWT 从 GWTBootstrap 生成的手风琴元素,它产生类似于下面的 html 的内容:

<div class="accordion" id="gwt-uid-1234">
    <div class="accordion-group" id="test">
        <div class="accordion-heading">Header1</div>
            ...
    </div>
</div>

我希望复制此 jquery 调用以移除外部手风琴元素,而不删除其内容。

 $('#test').unwrap();

也就是说,我想关闭手风琴在打开另一个手风琴时自动打开或关闭的功能,让所有已经打开的手风琴保持打开状态。

我希望在我的 Java class 中的 onClick 方法中执行此操作,分配给屏幕上的复选框,用户可以使用该复选框激活/停用手风琴功能。

public UIPanel() {  
    initWidget(uiBinder.createAndBindUi(this));
    disableCheckbox.addClickHandler(new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
            if(accordionsDisabled) {
                Window.alert("accordions enabled");
                // IGNORE THIS FOR MEANTIME - REMOVE FUNCT IS PRIORITY 1                
                accordionsDisabled = false;
            } else {
                Window.alert("accordions disabled");
                // remove outer accordion element i.e. $('#test').unwrap();
                contentPanel.getElementById("test").removeParent();
                accordionsDisabled = true;
            }
        }
    });
}

我在 Java 中使用 Element 或 Dom 对象没有成功(使用 removeParent 方法)还有其他方法吗?

gwt-jquery呢?有了这个,你就得到了 jquery 的接口,并且可以使用 JQueryElementunwrap 方法来实现完全相同的:

Remove the parents of the set of matched elements from the DOM leaving the matched elements in their place.

public native JQueryElement<T> unwrap();

GWT 维护的另一个接口Material 可以找到设计here。它基于 gwt-jquery。如您所见,例如 JQueryElement.java 几乎相同。它也可以通过 Maven 获得。

另一种没有另一个库的方法是 JSNI(JavaScript 本机接口)方法并使用 JQuery unwrap 函数,如下所示.

private static native void unwrapAccordionGroup() /*-{
      $wnd.jQuery('#test').unwrap()
 }-*/;