Javascript 在DOM中搜索元素
我需要将ChosenJS jq插件包装到Vaadin组件中。我想它会在初始化时进行一些jq查询 因此,我的Javascript 在DOM中搜索元素,javascript,jquery,dom,vaadin7,Javascript,Jquery,Dom,Vaadin7,我需要将ChosenJS jq插件包装到Vaadin组件中。我想它会在初始化时进行一些jq查询 因此,我的元素应该在调用$().selected()时附加到DOM Vaadin组件是动态绑定的:当您进行一些动态标记时,您只有一个分离的小部件可以提供一个元素,并且这些元素随后被嵌套到DOM中。因此,我尝试使用GWT定时器进行延迟函数调用(我认为它在内部使用了setTimeout或setInterval),认为当小部件元素出现在DOM中时,它会工作 这是一段代码。但它确实不起作用 代码段中有两个测试
元素应该在调用$().selected()
时附加到DOM
Vaadin组件是动态绑定的:当您进行一些动态标记时,您只有一个分离的小部件可以提供一个元素,并且这些元素随后被嵌套到DOM中。因此,我尝试使用GWT定时器进行延迟函数调用(我认为它在内部使用了setTimeout
或setInterval
),认为当小部件元素出现在DOM中时,它会工作
这是一段代码。但它确实不起作用
代码段中有两个测试
第15-19行显示小部件仍处于分离状态
第34行当元素应该在DOM中时,在30秒内启动测试。我真的可以在浏览器调试器中看到它。30秒足以确保您可以在窗体和调试器中看到它
第24-28行确保未分离
元素。它打印从
到
的所有元素
第29行也可以
这是一个gwt方法,它通过ID查找元素
第38-43行找不到我的元素
第42行-空jq包装
第42行-空
请帮助我理解为什么我找不到我的select
您应该将理解问题所需的任何代码直接包含到您的问题中,而不是仅通过外部引用(根据StackOverflow规则)提供。与您的问题无关,但您应该尝试使用
console.log(“==”)
来阻止日志条目而不是第一个控制台。log(“==”
和控制台.groupEnd()
作为第二个。发现我的widgetset正在
中加载。widgetset提取这些库:jq和Selected。所以它们在同一个iframe中。不知道这是否重要。您应该将理解问题所需的任何代码直接包含到您的问题中,而不是仅通过外部引用(根据StackOverflow规则)提供。与您的问题无关,而是不要执行console.log(“==”)
要阻止日志条目,您应该尝试使用console.group();
而不是第一个控制台。日志(“==”
和控制台.groupEnd()
作为第二个控制台。发现我的widgetset正在
中加载。widgetset拉取这些库:jq和selected。因此它们在同一个iframe中。不知道这是否重要。
public ChosenImpl(VChosenUI target, final ChosenServerRpc rpc) {
StyleInjector.injectStylesheet(ChoosenStaticApi.INSTANCE.chosen_css().getText());
ScriptInjector.fromString(ChoosenStaticApi.INSTANCE.jquery_min_js().getText()).inject();
ScriptInjector.fromString(ChoosenStaticApi.INSTANCE.chosen_jquery_js().getText()).inject();
this.rpc = rpc;
select = DOM.createSelect();
select.setAttribute("id", "artix-chosen-id-" + select.hashCode());
select.setAttribute("multiple", "");
select.setAttribute("data-placeholder", placeholder);
//select.setAttribute("style", "");
this.target = target;
target.addStyleName("artix-chosen-target");
target.getElement().appendChild(select);
Element pp = select;
while (pp != null) {
logg(pp);
pp = pp.getParentElement();
}
Timer timer = new Timer() {
@Override
public void run() {
Element pp = select;
while (pp != null) {
logg(pp);
pp = pp.getParentElement();
}
logg(DOM.getElementById("artix-chosen-id-" + select.hashCode()));
findSelectInDOM("artix-chosen-id-" + select.hashCode());
}
};
timer.schedule(30000);
}
public static native void findSelectInDOM(String jqselector) /*-{
console.log("===============================================================");
console.log(jqselector);
console.log(document.getElementsByTagName("select"));
console.log($("#"+jqselector));
console.log(document.getElementById(jqselector));
console.log("===============================================================");
}-*/;