In Mootools et al. it is really easy to select all elements in the DOM
with a given attribute, such as CSS class. In Mootools this is
var listOfDivsWithClassRED = $$(".RED")

I have a need to select all the elements on a page with a given
attribute and value and I'm trying to mimic Mootools functionality AND
speed!

I found:
http://stackoverflow.com/questions/2406002/find-an-element-by-css-selector-in-gwt
and then saw Robert Hanson's:
http://gwt-widget.sourceforge.net/docs/xref/org/gwtwidgets/client/util/SearchUtils.html

Robert Hanson's recursion idea seems correct to me, except in my case
the execution time is 5500ms for a typical page. Due to the structure
of my markup I know that the elements I am interested in will not
occur deeper than a certain depth on the DOM tree, so I put a
recursionMaxDepth concept into my recursion and now I'm down to
3000ms.

That's still too long, but I know how to solve it. The problem is (see
Robert's code) we are dealing with GWT Elements. For example, see the
lines:
c = DOM.getAttribute(element, "className");
Element child = DOM.getChild(element, i);

So in my case the recursive function is inspecting about 1000 elements
on the page (which is fine) but then GWT is turning each child element
into an Element just to inspect an attribute and value pair, and then
it discards the Element if it doesn't match my criteria. That's VERY
expensive.

I need a way to spin through those 1000ish elements quickly, treating
them as "raw DOM elements", maybe Nodes, and then do the attribute
matching on those light-weight objects. If one of them matches then
GWT can turn it into a full blown Element object.

Please set me on the right track. Node looks promising for its
lightweight child-getting facilities, but not sure how to then inspect
an attribute, and for that matter obtain an Element out of it.

Furthermore, can anyone think of other enhancements to make this
quicker?

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to