[JavaScript/DOM/IE7] Elements in DOM-tree niet zichtbaar

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08 23:34
Ik heb een javascript die mijn DOM-tree manipuleert. Dit script creeert namelijk enkele basic elementen: DIV en TABLE en kent er enkele attributen aan toe.

Het probleem is dat in Firefox dit script correct wordt uitgevoerd en dat de output ook goed is, maar IE7 gaat hier de mist in. ( in IE8 werkt ook alles naar behoren ).

Wanneer ik de DOM-tree bekijk, zie ik dat alle elementen wel aanwezig zijn, maar toch niet getoond worden. Is dit een gekende bug in IE7 ?
Ter informatie: ik gebruik prototype om mijn DOM-tree te manipuleren.

Hieronder wat code + info:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
function generate(height, position, data, parentContainer)
{
    var nodeWidth = ...
    var restWidth = ...
    ...
    generateTableHeaders(height, parentContainer, nodeWidth);   
    generateTable(0, height, position, normalizedData, parentContainer, nodeWidth, restWidth);
}

function generateTableHeaders(height, parentContainer, nodeWidth)
{
    for (var i=0; i<=height; i++)
    {       
        var DIV_header = new Element("div", {"id":"header_" + i});
        var H3 = new Element("h3");     
    
        DIV_header.addClassName("knockoutTableHeader");     
        DIV_header.setStyle({"float":"right", "width":nodeWidth + "px"});
        
        H3.insert((i==0) ? "finale" : "1/" + Math.pow(2, i) + " finale");
        DIV_header.insert(H3);
        parentContainer.insert(DIV_header);
    }
    
    var DIV_cleaner = new Element("div");
    DIV_cleaner.addClassName("cleaner");
    parentContainer.insert(DIV_cleaner);    
}

function generateTable(level, height, position, data, parentContainer, nodeWidth, restWidth)
{   
    if (level == height) 
    {
        // at bottom of the tree 
        generateNode(position, data, parentContainer, nodeWidth + restWidth);
    }
    else 
    {
        generateLeft(level+1, height, position + '0', data, parentContainer, nodeWidth, restWidth);
        generateNode(position, data, parentContainer, nodeWidth);
        generateRight(level+1, height, position + '1', data, parentContainer, nodeWidth, restWidth);
    }
}

function generateRight(level, height, position, data, parentContainer, nodeWidth, restWidth)
{
    // container for right-tree 
    var DIV_right = new Element("div", {"id":"right_" + level});
    DIV_right.addClassName("right");
    DIV_right.setStyle({"float":"left", "width":restWidth + "px"});
                
    //create right-table into this new container
    generateTable(level, height, position, data, DIV_right, nodeWidth, restWidth - nodeWidth);
    
    // place the container in its parent-container 
    parentContainer.insert(DIV_right);      
}


Het javascript zal recursief een "knockout-table" genereren mbv DIV en het float-attribuut. Hierboven wordt een fragment uit dit script getoond.
De generate functie wordt in mijn HTML file geinvoked.
Initieel is de parentContainer is gewoon een DIV element dat reeds in mijn HTML pagina's zit. Verder in de recursie zal de parentContainer steeds een gecreeerde DIV-element (left / right) worden.

Het vreemde hierbij is ook dat IE7 wel de elementen die in de generateTableHeaders functie worden gecreeerd wel weergeeft, maar niet de elementen in de generateTable functie. Deze functie maakt de headers: "finale" / "1/2 finale" / ...

De output in FF & IE8 is:
Afbeeldingslocatie: http://img34.imageshack.us/img34/8259/knockoutff.jpg

De output in IE7 is:
Afbeeldingslocatie: http://img692.imageshack.us/img692/4766/knockoutie7.jpg

De DOM-tree is wel degelijk correct in IE:
Afbeeldingslocatie: http://img163.imageshack.us/img163/706/domtree.jpg

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.


Acties:
  • 0 Henk 'm!

  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08 23:34
Niemand die mij een duw(tje) in de goede richting kan geven ? :-)

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Kan je een linkje posten naar een werkende testcase?

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08 23:34
Zeker:

Je kan eens surfen naar http://www.thenewcrucible.be en dan navigeren naar:

clubkampioenschap 2009-2010 > resultaten > sub-tornooi HT

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.


Acties:
  • 0 Henk 'm!

  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08 23:34
Heeft er iemand reeds een lumineus idee gehad ? :)
Ik heb mijn javascript volledig met prototype geimplementeerd omdat ik dan dacht dat dit wel op iedere browser zou werken. Helaas...

Ik heb ook reeds een link op het Internet gevonden die dit probleem meer of min beschrijft, maar daarin stond dat dit te wijten was aan de "setAttribute" functie die niet werkte. Maar aangezien er in de "generateTableHeader" functie ook attributes gezet worden, kan het toch daaraan niet liggen?

Indien er nog meer informatie nodig is, laat maar weten.

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Ik heb er nog niet naar kunnen kijken, maar mijn eerste ingeving is dat je last hebt van 'peekaboo' oid; een bug die in IE6 veel (en soms nog in IE7) voorkomt. Dat wil zeggen dat je floats niet goed gerendered worden waardoor ze onzichtbaar blijven. Hoe het op te lossen is is meestal een beetje afhankelijk van de algehele styling. Je kan in ieder geval confirmeren of het aan je styling ligt door eens te kijken of zonder styling je content wel zichtbaar is.

Intentionally left blank

Pagina: 1