469,323 Members | 1,574 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,323 developers. It's quick & easy.

Combining object arrays

If I have 2 object arrays like:

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?

Sep 14 '05 #1
10 6872
mike said the following on 9/14/2005 4:37 PM:
If I have 2 object arrays like:

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
Sep 14 '05 #2
mike wrote:
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

[...]
Sep 14 '05 #3
Mick,

Why is this bad?

var txtobj = document.theform.getElementsByTagName("input")

Is it because you think it only gets <input ..> but not <INPUT ...>

Mike

Sep 14 '05 #4
mike wrote:
Mick,

Why is this bad?

var txtobj = document.theform.getElementsByTagName("input")

Is it because you think it only gets <input ..> but not <INPUT ...>


var txtobj = theform.getElementsByTagName("input");

missing "document" reference...

Will work in IE, though.

Mick
Sep 14 '05 #5
i had already defined

var theform = document.update;

so ... it is ok then ... ?

Sep 14 '05 #6
mike wrote:
If I have 2 object arrays like:

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;
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
Sep 15 '05 #7
mike wrote:
i had already defined

var theform = document.update;

so ... it is ok then ... ?

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
Sep 15 '05 #8
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.

I agree. thanks though for your explanation and collection code.

Mike

Sep 15 '05 #9
Lee
mike said:

If I have 2 object arrays like:

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.


You're probably handling the input's and the select's differently
anyway, so why bother with pulling them out and concatinating them?

for (i=0;i<theform.elements.length;i++) {
if (theform.elements[i].type=="input") {
} else if (...) {
...
}
}

Sep 15 '05 #10
This is what I decided to do:

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

Sep 18 '05 #11

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

3 posts views Thread by Phil Powell | last post: by
1 post views Thread by Mr. Jingles | last post: by
1 post views Thread by ferraro.joseph | last post: by
1 post views Thread by Jeff | last post: by
6 posts views Thread by tshad | last post: by
8 posts views Thread by rodeored | last post: by
reply views Thread by suresh191 | last post: by
reply views Thread by Gurmeet2796 | last post: by
reply views Thread by mdpf | last post: by
reply views Thread by harlem98 | last post: by
reply views Thread by listenups61195 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.