var txtobj = theform.getElementsByTagName("input");
var selobj = theform.getElementsByTagName("select");
and i want to iterate over them I'd like to combine them and then
iterate over them.
so I would do something like this below, but that doesn't look right.
var bothobj = txtobj+selobj;
for( var i=0; i<bothobj.length; i++ )
{
do something....
}
Any thought?
Test it and see.
.concat()
--
Randy
comp.lang.javascript FAQ - http://jibbering.com/faq & newsgroup weekly
> If I have 2 object arrays like:
>
> var txtobj = theform.getElementsByTagName("input");
> var selobj = theform.getElementsByTagName("select");
Bad!!
var txtobj = document.theform.getElementsByTagName("input")
But why not use DOM 0?
function checkInputsAndSelects(form){
var f=form.length;
while(f--){
if(form[f].type.toLowerCase()=="input"){
// do stuff with input
}
if(form[f].type.toLowerCase()=="select"){
// do stuff with select
}
}
}
Mick
[...]
Why is this bad?
var txtobj = document.theform.getElementsByTagName("input")
Is it because you think it only gets <input ..> but not <INPUT ...>
Mike
var txtobj = theform.getElementsByTagName("input");
missing "document" reference...
Will work in IE, though.
Mick
var theform = document.update;
so ... it is ok then ... ?
No, it's not right. getElementsByTagName returns an HTML collection,
not an array. Collections have some array-like properties, e.g. length,
but have none of an Array's methods.
>
> for( var i=0; i<bothobj.length; i++ )
> {
> do something....
> }
To concatenate collections, you could create a concatenation function
that adds the elements of a collection to an array[1]:
function concatCollections() {
var c, k, j, i = arguments.length;
var a = [];
for ( j=0; j<i; j++ ) {
c = arguments[j];
h = c.length;
for ( k=0; k<h; k++ ){
a.push(c[k]);
}
}
return a;
}
And once you've created the collections, call the above function:
var arrayOfElements = concatCollections(txtobj, selobj);
But this seems a waste of time. Whatever function that is going to
iterate over the array could accept multiple arguments and iterate over
collections instead.
Unless there are some array methods you'd like to use.
[1] Push is not supported in very old browsers (it was introduced in
JavaScript 1.2, works in Netscape 3+ and IE 5+ I think), it's pretty
simple to create your own push function if required.
<URL:http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:push>
--
Rob
Your original post:
<QUOTE>
If I have 2 object arrays like:
var txtobj = theform.getElementsByTagName("input");
var selobj = theform.getElementsByTagName("select");
[...]
</QUOTE>
Missing "document" reference.
Mick
collections instead.
I agree. thanks though for your explanation and collection code.
Mike
var theform = document.update;
var txtobj = theform.getElementsByTagName("input");
var mod = do_something(txtobj);
... something happens with the results of mod
var selobj = theform.getElementsByTagName("select");
var mod = do_something(selobj);
... something happens with the results of mod
function do_something(obj)
{
for( var i=0; i<obj.length; i++ )
{
do something....
return .....
}
}
Mike