Login or Sign up Help | Site Map
Connecting Tech Pros Worldwide

getAttribute ('id') Not Working

Question posted by: vivekian (Guest) on December 5th, 2006 01:35 PM
Hi ,

In one of the javascript functions , i need to get the ids of the
elements. This function works in Internet Explorer :

var TabNames = ParentTab.childNodes ;

for ( i = 0 ; i < TabNames.length ; i++ )
{
var TabID = TabNames[i].getAttribute('id') ;
var TabIDSuffix = TabID.split (Splitter) ;

if ( TabIDSuffix[0].length != 0 )
{
if ( TabIDSuffix[0] == URLTab )
{
result = true ;
break ;
}
}

}
// TabNames is the array of divs which are enclosed in the parent div.

But in Firefox it gives an error saying :
Error: TabNames[i].getAttribute is not a function

Is there an alternate way to do this.

Would you like to answer this question?
Sign up for a free account, or Login (if you're already a member).
VK's Avatar
VK
Guest
n/a Posts
December 5th, 2006
01:55 PM
#2

Re: getAttribute ('id') Not Working

vivekian wrote:
Quote:
Originally Posted by
In one of the javascript functions , i need to get the ids of the
elements. This function works in Internet Explorer :
>
var TabNames = ParentTab.childNodes ;
>
for ( i = 0 ; i < TabNames.length ; i++ )
{
var TabID = TabNames[i].getAttribute('id') ;
var TabIDSuffix = TabID.split (Splitter) ;
>
if ( TabIDSuffix[0].length != 0 )
{
if ( TabIDSuffix[0] == URLTab )
{
result = true ;
break ;
}
}
>
}
// TabNames is the array of divs which are enclosed in the parent div.
>
But in Firefox it gives an error saying :
Error: TabNames[i].getAttribute is not a function


You are hitting the phantom nodes problem on Gecko-based browsers
<http://en.wikipedia.org/wiki/Phantom_nodes>

You have to add extra check to sort out element nodes and parasite text
nodes from your pretty-print. See for instance
<http://developer.mozilla.org/en/docs/firstChild(skip on pathetic
arguments why phantom nodes are not a bug and see the samples
themselves).

You can also use anti-phantom pretty-print:

<body
Quote:
Originally Posted by
><h1>Header</h1

Quote:
Originally Posted by
><p>Content</p
><p>More content

....

but unless you have an automation script (mine is on Perl) that's a
boring doing.


Martin Honnen's Avatar
Martin Honnen
Guest
n/a Posts
December 5th, 2006
01:55 PM
#3

Re: getAttribute ('id') Not Working
vivekian wrote:
Quote:
Originally Posted by
In one of the javascript functions , i need to get the ids of the
elements. This function works in Internet Explorer :
>
var TabNames = ParentTab.childNodes ;
>
for ( i = 0 ; i < TabNames.length ; i++ )


There could be a text node or comment node as a child which does not
have attribute so do a check for element nodes first e.g.
Quote:
Originally Posted by
{


var childNode = TabNames[i];
if (childNode.nodeType === 1) {
// now you have an element and can access attributes of the element
Quote:
Originally Posted by
var TabID = TabNames[i].getAttribute('id') ;


}

If that is HTML that you script then simply use
childNode.id
not
childNode.getAttribute('id')
--

Martin Honnen
http://JavaScript.FAQTs.com/

Erwin Moller's Avatar
Erwin Moller
Guest
n/a Posts
December 5th, 2006
02:05 PM
#4

Re: getAttribute ('id') Not Working
vivekian wrote:
Quote:
Originally Posted by
Hi ,
>
In one of the javascript functions , i need to get the ids of the
elements. This function works in Internet Explorer :
>
var TabNames = ParentTab.childNodes ;
>
for ( i = 0 ; i < TabNames.length ; i++ )
{
var TabID = TabNames[i].getAttribute('id') ;
var TabIDSuffix = TabID.split (Splitter) ;
>
if ( TabIDSuffix[0].length != 0 )
{
if ( TabIDSuffix[0] == URLTab )
{
result = true ;
break ;
}
}
>
}
// TabNames is the array of divs which are enclosed in the parent div.
>
But in Firefox it gives an error saying :
Error: TabNames[i].getAttribute is not a function
>
Is there an alternate way to do this.


Does TabNames[i].id return something usable?

Erwin Moller

JP. Baker's Avatar
JP. Baker
Guest
n/a Posts
December 5th, 2006
02:05 PM
#5

Re: getAttribute ('id') Not Working
In article <1165330667.536168.85350@16g2000cwy.googlegroups.co m>,
vivekian <viveklinux@gmail.comwrote:
Quote:
Originally Posted by
>In one of the javascript functions , i need to get the ids of the
>elements. This function works in Internet Explorer :
>
>var TabNames = ParentTab.childNodes ;
>
> for ( i = 0 ; i < TabNames.length ; i++ )
> {
> var TabID = TabNames[i].getAttribute('id') ;
> var TabIDSuffix = TabID.split (Splitter) ;
>
> if ( TabIDSuffix[0].length != 0 )
> {
> if ( TabIDSuffix[0] == URLTab )
> {
> result = true ;
> break ;
> }
> }
>
> }
>// TabNames is the array of divs which are enclosed in the parent div.
>
>But in Firefox it gives an error saying :
>Error: TabNames[i].getAttribute is not a function


You are almost certainly hitting the text nodes as well as the required
nodes - check with the DOM Inspector - you should probably check the
nodeType or use hasAttributes() before calling getAttributes.

--
John P Baker

ASM's Avatar
ASM
Guest
n/a Posts
December 5th, 2006
02:05 PM
#6

Re: getAttribute ('id') Not Working
vivekian a écrit :
Quote:
Originally Posted by
In one of the javascript functions , i need to get the ids of the
elements. This function works in Internet Explorer :


Are your elements really have an id (and not only a name) ?
IE love too much to call a name an id and vice versa.
Quote:
Originally Posted by
But in Firefox it gives an error saying :
Error: TabNames[i].getAttribute is not a function
>
Is there an alternate way to do this.


for ( i = 0 ; i < TabNames.length ; i++ )
{
if(TabNames[i] && TabNames[i].tagName=='DIV' && TabNames[i].id)
var TabID = TabNames[i].getAttribute('id') ;

Or try :

for ( i = 0 ; i < TabNames.length ; i++ )
{
if(TabNames[i] && TabNames[i].id)
var TabID = TabNames[i].id;

--
Stephane Moriaux et son (moins) vieux Mac déjà dépassé
Stephane Moriaux and his (less) old Mac already out of date

RobG's Avatar
RobG
Guest
n/a Posts
December 5th, 2006
07:35 PM
#7

Re: getAttribute ('id') Not Working

vivekian wrote:
Quote:
Originally Posted by
Hi ,
>
In one of the javascript functions , i need to get the ids of the
elements. This function works in Internet Explorer :
>
var TabNames = ParentTab.childNodes ;


Others have given you some ideas, but always room for more: :-)

var TabNames = ParentTab.getElementsByTagName('div');

Now TabNames contains *only* div elements, not all the childNodes of
TabNames. Or you could use feature detection (see below).

Quote:
Originally Posted by
>
for ( i = 0 ; i < TabNames.length ; i++ )
{
var TabID = TabNames[i].getAttribute('id') ;
var TabIDSuffix = TabID.split (Splitter) ;


How about testing for the id property rather than using getAttribute:

var TabID, TablDSuffix;
if ((TabID = TabNames[i].id) && (TabIDSuffix =
TabID.split (Splitter))){
/* Do stuff with TabIDSuffix */
}


--
Rob


 
Not the answer you were looking for? Post your question . . .
184,038 Experts ready to help you find a solution.
Sign up for a free account, or Login (if you're already a member).

Latest Articles: Read & Comment
  • Didn't find the answer you were looking for?
    Post Your Question
  • Top Community Contributors