我想为任何标签添加 MouseOver 事件处理程序。举个例子,我想为旧版 HTML 页面中的每个锚点页面添加事件处理程序。
继GWT指南 http://code.google.com/webtoolkit/doc/1.6/DevGuideUserInterface.html#DevGuideAccessingDOM,我能够使用他们建议的 JSNI 方法在更正小错误(缺少括号和类型)后检索所有锚标记。
但是,我想使用 ArrayList 中收集的元素并将它们全部绑定到事件处理程序。我怎样才能做到这一点?
我写的代码如下:
private native void putElementLinkIDsInList(BodyElement elt, ArrayList list) /*-{
var links = elt.getElementsByTagName("a");
for (var i = 0; i < links.length; i++ ) {
var link = links.item(i);
link.id = ("uid-a-" + i);
[email protected] /cdn-cgi/l/email-protection::add(Ljava/lang/Object;) (link.id);
}
}-*/;
/**
* Find all anchor tags and if any point outside the site, redirect them to a
* "blocked" page.
*/
private void rewriteLinksIterative() {
ArrayList links = new ArrayList();
putElementLinkIDsInList(Document.get().getBody(), links);
for (int i = 0; i < links.size(); i++) {
Element elt = DOM.getElementById((String) links.get(i));
rewriteLink(elt, "www.example.com");
}
}
/**
* Block all accesses out of the website that don't match 'sitename'
*
* @param element
* An anchor link element
* @param sitename
* name of the website to check. e.g. "www.example.com"
*/
private void rewriteLink(Element element, String sitename) {
String href = DOM.getElementProperty(element, "href");
if (null == href) {
return;
}
// We want to re-write absolute URLs that go outside of this site
if (href.startsWith("http://")
&& !href.startsWith("http://" + sitename + "/")) {
DOM.setElementProperty(element, "href", "http://" + sitename
+ "/Blocked.html");
}
}
你可能想要使用Document.getElementsByTagName("a") http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/gwt/dom/client/Document.html#getElementsByTagName%28java.lang.String%29,它返回一个NodeList
包含可以转换为的元素AnchorElement
s 暴露标签的href
属性。
试试这个代码:
NodeList<Element> elems = Document.get().getElementsByTagName("a");
for (int i = 0; i < elems.getLength(); i++) {
Element elem = elems.getItem(i);
AnchorElement a = AnchorElement.as(elem);
if (!a.getHref().startsWith("http://yoursite.com")) {
a.setHref("http://yoursite.com/blockedpage");
}
}
要添加事件处理程序,您可以将Element
in an Anchor
using wrap() http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/gwt/user/client/ui/Anchor.html#wrap%28com.google.gwt.dom.client.Element%29
for (int i = 0; i < elems.getLength(); i++) {
Element elem = elems.get(i);
Anchor a = Anchor.wrap(elem);
a.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Window.alert("yay!");
}
});
}
(如果处理程序总是做同样的事情,您将只想实例化一个ClickHandler
并将其添加到每个元素,而不是为每个元素创建处理程序)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)