Toon posts:

[JS] nodeValue wel in FF, niet in IE

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil m.b.v. Javascript de waarde van een node te weten komen, en in FF werkt dat prima op onderstaande manier. In IE krijg ik echter de 'firstChild is null or not an object'-error. Wat doe ik verkeerd? Ik heb er op verschillende manieren aan gesleuteld, maar aangezien het in FF goed werkt en de eerste alert in IE ook, lijkt de basis van m'n probleem niet in het verkeerd aanspreken van de DOM te zitten?


HTML:
1
2
3
4
<dl>
    <dt><a href="#" onclick="showValue(this)">Als je hier op klikt...</a></dt>
    <dd>...wil ik deze waarde weten</dd>
</dl>


De eerste alert is wel goed (geeft 'Als je hier op klikt...'), maar de tweede geeft in IE de error.

JavaScript:
1
2
3
4
function showValue(current_object) {
    alert(current_object.firstChild.nodeValue);
    alert(current_object.parentNode.parentNode.childNodes[3].firstChild.nodeValue);
}

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Met parentNode.parentNode zit je aan het dl element en die heeft maar twee childnodes.

March of the Eagles


Verwijderd

Topicstarter
Hacku schreef op maandag 22 januari 2007 @ 19:44:
Met parentNode.parentNode zit je aan het dl element en die heeft maar twee childnodes.
Volgens de DOM inspector in FF niet; die ziet 5 children, namelijk '#text', 'DT', '#text', 'DD', '#text'. In dat geval is de DD dus het vierde element. Vandaar de key 3 in de array.

Maar inderdaad, nu ik als key 1 gebruik, werkt het wel in IE. In FF niet meer, maar da's logisch :P

Ik kan me haast niet voorstellen dat hier geen crossbrowser compatible manier voor is :?

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Ja, vergeten zeggen, daar zal vast whitespace bijzitten, misschien kan je hier wat mee: Misschien heb je hier wat aan: http://developer.mozilla.org/en/docs/Whitespace_in_the_DOM

Je kan dit er ook van tussen vissen:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
function test ( obj )
{
    var nodes = [];
    var el = obj.parentNode.parentNode.childNodes;
    
    for ( var i = 0; i < el.length; i++ ) 
    {
        if ( el[i].nodeType == Node.ELEMENT_NODE )
            nodes.push ( el[i] );
    }
    
    alert ( nodes[1].firstChild.nodeValue ); // deze moet je hebben
}

[ Voor 29% gewijzigd door XWB op 22-01-2007 20:16 ]

March of the Eagles


  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Hm, zo te zien kent IE Node.ELEMENT_NODE ook niet, die waarde moet je dan even vervangen door 1. Zie ook http://developer.mozilla.org/en/docs/DOM:element.nodeType

March of the Eagles


Verwijderd

Topicstarter
Ja, klopt. Had dat inmiddels al zelf uitgevogeld :)

Bedankt voor de hulp!
Pagina: 1