Connecting Tech Pros Worldwide Forums | Help | Site Map

accessing html collections

mumrah@gmail.com
Guest
 
Posts: n/a
#1: Dec 7 '05
When getting different elements out of an array in JS, i know
array.item(0) and array[0] both return the 0th element. My question,
will this work in any instance?


Randy Webb
Guest
 
Posts: n/a
#2: Dec 7 '05

re: accessing html collections


mumrah@gmail.com said the following on 12/7/2005 8:35 AM:[color=blue]
> When getting different elements out of an array in JS, i know
> array.item(0) and array[0] both return the 0th element. My question,
> will this work in any instance?[/color]

Only in IE. [] is for Arrays. () is for function calls. IE makes () for
whatever it wants to use them for. Use [].

--
Randy
comp.lang.javascript FAQ - http://jibbering.com/faq & newsgroup weekly
Javascript Best Practices - http://www.JavascriptToolbox.com/bestpractices/
VK
Guest
 
Posts: n/a
#3: Dec 7 '05

re: accessing html collections



mumrah@gmail.com wrote:[color=blue]
> When getting different elements out of an array in JS, i know
> array.item(0) and array[0] both return the 0th element. My question,
> will this work in any instance?[/color]

There is not item() method in Array object and myArray.item(0) will
lead to an error "Object doesn't support this property or method".

HTMLCollection (or simply Collection) is a far relative of Array but it
is not Array (neither it's a Hashtable).

You should read through
<http://www.geocities.com/schools_ring/ArrayAndHash.html> for a clearer
picture.

mumrah@gmail.com
Guest
 
Posts: n/a
#4: Dec 7 '05

re: accessing html collections


So if i'm parsing through the DOM, and i have some parents and i access
it's children:

object.childNodes

I should access the children via [0] and not item(0) ?

example: document.getElementById('foo').childNodes[0] as opposed to
document.getElementById('foo').childNodes.item(0)

I had always used the [] to access array elements in JS until i
starting writing this program that has to parse through an xml dom. The
site that i read up on that topic used to item() method so, naturally,
i used it as well. But i'm happy to change back to using brackets. less
typing :)

VK
Guest
 
Posts: n/a
#5: Dec 8 '05

re: accessing html collections



mumrah@gmail.com wrote:[color=blue]
> So if i'm parsing through the DOM, and i have some parents and i access
> it's children:
>
> object.childNodes
>
> I should access the children via [0] and not item(0) ?
>
> example: document.getElementById('foo').childNodes[0] as opposed to
> document.getElementById('foo').childNodes.item(0)
>
> I had always used the [] to access array elements in JS until i
> starting writing this program that has to parse through an xml dom. The
> site that i read up on that topic used to item() method so, naturally,
> i used it as well. But i'm happy to change back to using brackets. less
> typing :)[/color]

item() is Microsoft method, maybe someone else accepted it either, but
the most universal way is collection[i]

Some IE-specific collections are locked for conventional use: you have
to wrap them into Microsoft Enumerator object first. These are for
example file/folder collections returned by FileSystemObject. But in
regular DOM brackets are more reliable in all curcumstances.

Thomas 'PointedEars' Lahn
Guest
 
Posts: n/a
#6: Dec 8 '05

re: accessing html collections


VK wrote:
[color=blue]
> mumrah@gmail.com wrote:[color=green]
>> When getting different elements out of an array in JS, i know
>> array.item(0) and array[0] both return the 0th element. My question,
>> will this work in any instance?[/color]
>
> There is not item() method in Array object and myArray.item(0) will
> lead to an error "Object doesn't support this property or method".
>
> HTMLCollection (or simply Collection) is a far relative of Array but
> it is not Array (neither it's a Hashtable).[/color]

Whether that is true or not depends on what you consider a Hashtable.

Elements of HTMLCollections (where there is no Collection interface defined
or used in W3C DOM Level 2+) can be accessed by alphanumeric indexes, where
in ECMAScript implementations this feature is realized through standard
property accessor syntax, as with any other object; the difference is that
adding or removing one element from the collection results in the
recalculation of the assigned numeric indexes of each element, and that
modifying the value of an element accessed through an alphanumeric index
immediately immediately affects subsequent accesses to that element through
its numeric index and vice-versa.
[color=blue]
> You should read through
> <http://www.geocities.com/schools_ring/ArrayAndHash.html> for a clearer
> picture.[/color]

No, you should not. That document is filled with VK's misconceptions about
Array objects especially and the used programming languages in general.

Search this group for "property accessor" and "array" for a clearer picture
of what really happens.


PointedEars
Thomas 'PointedEars' Lahn
Guest
 
Posts: n/a
#7: Dec 8 '05

re: accessing html collections


VK wrote:
[color=blue]
> mumrah@gmail.com wrote:[color=green]
>> So if i'm parsing through the DOM, and i have some parents and i access
>> it's children:
>>
>> object.childNodes
>>
>> I should access the children via [0] and not item(0) ?[/color][/color]

It is virtually the same in an HTML 4.01/XHTML 1.0 context.
Whether or not the former should be used depends on the context.
[color=blue][color=green]
>> example: document.getElementById('foo').childNodes[0] as opposed to
>> document.getElementById('foo').childNodes.item(0)
>>
>> I had always used the [] to access array elements in JS until i
>> starting writing this program that has to parse through an xml dom.[/color][/color]

The XML DOM is not DOM Level 2 _HTML_. The property accessor method is
defined for that DOM which applies to HTML 4.01 and XHTML 1.0 documents
only.
[color=blue][color=green]
>> The site that i read up on that topic used to item() method so,
>> naturally, i used it as well. But i'm happy to change back to using
>> brackets. less typing :)[/color]
>
> item() is Microsoft method, maybe someone else accepted it either,[/color]

Wrong. item() as used here is a method of DOM Level 2 HTML's HTMLCollection
interface. Using the property accessor syntax with a numeric parameter is
the same as calling this method:

<URL:http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-75708506>
<URL:http://www.w3.org/TR/DOM-Level-2-HTML/ecmascript-binding.html>
[color=blue]
> but the most universal way is collection[i][/color]

What is to be noted is that access methods of the W3C DOM tend to be poorly
implemented [ref. Element::setAttribute()], therefore the property accessor
syntax /may be/ the more reliable one, the _proper_ context provided (see
above). It also is less error-prone _there_ because property accessor
syntax is a feature of the programming language, while a method of DOM
objects is a feature of the DOM -- the method call fails with a
ReferenceError if the method is not supported, the property accessor syntax
will not (unless that expression is used untested as base reference for
another property access).
[color=blue]
> Some IE-specific collections are locked for conventional use: you have
> to wrap them into Microsoft Enumerator object first. These are for
> example file/folder collections returned by FileSystemObject. But in
> regular DOM brackets are more reliable in all curcumstances.[/color]

You are confusing languages (here: JScript, VBScript) and AOM/DOM. Again.


PointedEars
Closed Thread