Friday, January 04, 2008 at 3:46 PM
UPDATE (June 19): The post has been modified to demonstrate element.children.item() instead of element.children() which is not supported on Mac and Linux.
It's often useful to iterate through children of a div or view for resizing or debugging. You can do this in a few ways. Let's say I have a gadget with the following XML specification:
<view width="200" height="200">Whoops! I've forgotten to set the opacity of the children. We can do that in JavaScript.
<div name="parent_div">
<img name="child_1" />
<label name="child_2" />
<div name="child_3" />
</div>
</view>
Option 1: Enumerating using the child's name
for (var i = 1; i < 4; ++i) {
var element = parent_div.children.item("child_" + i);
element.opacity = 150;
}
Option 2: Using the count
for (var i = 0; i < parent_div.children.count; ++i) {
var element = parent_div.children.item(i);
element.opacity = 150;
}
Option 3: Using the Enumerator object
UPDATE (June 19): This technique only works on Windows.for (var e = new Enumerator(parent_div.children); !e.atEnd(); e.moveNext()) {Have a tip you'd like to share? Send it to gd-developer AT google DOT com.
var element = e.item();
element.opacity = 150;
}
3 comments:
I think there might be a typo here:
for (var i = 0; i < parent_div.children.count(); ++i) { var element = parent_div.children(i); element.opacity = 150;}
I think you want the property of count, like so:
parent_div.children.count
I kept getting method not defined errors.
So I think you want:
for (var i = 0; i < parent_div.children.count; ++i) { var element = parent_div.children(i); element.opacity = 150;}
thanks for the tips!
Art Shectman
Gadget Developer
http://www.elephantventures.com
Art, you're absolutely right. Thanks for pointing out the problem! I've fixed the post.
1. children(i) is not defined in the API. You should use children.item(i) instead to ensure gadget portability.
2. Enumerator is Microsoft JScript thing. Thought it is simulated on mac and Linux version of gadgets, the simulations are not complete. So you'd better not to use them.
Post a Comment