[JS/ CSS/ DOM] nieuwe nodes krijgen geen styleopmaak

Pagina: 1
Acties:

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Matched: appendchild, removechild
Hallo,

Ik ben vrij nieuw met het DOM binnen JS en vroeg mij het volgende af.
Het de volgende code geschreven om DOM en JS te testen:

code:
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
58
59
<html>
    <head>
        <title> DOM is cool! </title>

        <style>
            
            div.zorf
            {
                font-weight: bold;
            }

            div.zarf
            {
                color: green;
            }

        </style>

        <script type="text/javascript">
                    
            function insertNewText()
            {
                var para = document.getElementById("hold");
                var newPara = document.createElement("<div>");
                
                para.appendChild(newPara);
                newPara.setAttribute('class','zorf');
                
                var newText = document.createTextNode("DOM methods are cool, are they not?");
                
                newPara.appendChild(newText);
            
            }

            function removeCrap()
            {
                
                var para = document.getElementById("hold");
                var child = para.lastChild;
                
                if(para.lastChild)
                    para.removeChild(child);
                else
                    window.alert("No childs!");
            }



        </script>
    </head>
    
    <body id="body">
    
        <div id="hold"></div>
        
        <a href="Javascript: insertNewText();">create!</a> | 
        <a href="Javascript: removeCrap();">remove!</a>
    </body>
</html


Nu wil ik graag zorgen dat de nieuw gecreerde elementen door JS ook de styleopmaak meekrijgen die ik bovenaan heb gedefinieerd of in later stadium uit mijn .css document.

Is er een manier dat ik kan forcen dat hij de .css opnieuw inleest ofzo?
(zoals je al raad: hij geeft geen styleopmaak mee, gewoon platte tekst...)
de references naar de vele DOM CSS/ JS maken me een beetje duizelig dat ik niet echt de oplossing zie 8)7

mijn naam slaat nergens op, althans niet op mij :P


  • André
  • Registratie: Maart 2002
  • Laatst online: 08-04 16:23

André

Analytics dude

Geen matches
Vervang:
code:
1
var newPara = document.createElement("<div>");

Door:
code:
1
var newPara = document.createElement("div");

En het werkt. Kijk maar eens in de DOM en dan zie je dan er een <<div>> gecreeerd wordt.

Verwijderd

Geen matches
hoe doet ie het als je ipc setAttribute obj.className doet?

en andersom: als je in je css div[class=zorf] doet?

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Geen matches
Verwijderd schreef op donderdag 03 februari 2005 @ 15:01:
hoe doet ie het als je ipv setAttribute obj.className doet?
Ja dat is het. IE pakt setAttribute("class" ...) niet, FFoverigens wel. Misschien dat obj.class = ook nog wel werkt maar da's niet zo mooi natuurlijk.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Geen matches
Genoil:
Ja dat is het. IE pakt setAttribute("class" ...) niet, FFoverigens wel. Misschien dat obj.class = ook nog wel werkt maar da's niet zo mooi natuurlijk.
Zie ook http://www.w3.org/TR/2003...109/html.html#ID-58190037

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • André
  • Registratie: Maart 2002
  • Laatst online: 08-04 16:23

André

Analytics dude

Geen matches
Zou dan setAttribute("className" ...) welk werken?

In FF werken allebei de oplossingen, ik had de TS alleen getest in FF en daar bleken de < en > het probleem te zijn.

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Geen matches
Toppie mensen, oplossingen klopte.

de < en > waren inderdaad niet volgens het DOM.
Daarnaast bleek "class" ook conflicterend te zijn met een aantal talen en hebben ze gekozen voor className bij het W3C.

object.classname = "classname";
is de juiste manier voor FF & IE iig om een class toe te wijzen aan een object. :)

Ohw, ik zie net:

object.setAttribute("className", "classname");
werkt ook goed in FF & IE

[ Voor 31% gewijzigd door Zoolander op 03-02-2005 16:24 ]

mijn naam slaat nergens op, althans niet op mij :P


Verwijderd

Geen matches
die laatste is idd eigenlijk wat netter

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Geen matches
oke, parrt II

Ik heb nu dit, en in explorer geeft hij een foutmelding.
Ik snap niet wat ik mogelijk fout doe, want dit is toch zoals het HOORT te werken?

code:
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
<html>
    <head>
        <title> DOM is cool! </title>

        <script type="text/javascript">

            function swapType(value)
            {

                var para = document.getElementById('bla');

                para.setAttribute('type', 'hidden');
                
            }


        </script>
    </head>
    
    <body>
        
        <form action="action.php" id="phoneForm" name="phoneForm" method="POST">
            <select name="sort"  onChange="Javascript: swapType(this.value);">
                <option value="vast">vast</option>
                <option value="mobiel">mobiel</option>
            </select>

            &nbsp;
            <input type="text" id="bla" name="bla" value="sort">
            &nbsp;
            <input type="text" name="number" value="number">
            <br>
            <input type="submit" value="do it!">
        </form>

    </body>
</html>


Is IE gewoon niet klaar voor DOM ofzo? Of doe ik het weer eens krom? :9

[ Voor 23% gewijzigd door Zoolander op 03-02-2005 22:01 ]

mijn naam slaat nergens op, althans niet op mij :P


Verwijderd

Geen matches
in een event handler hoort geen "javascript:"

welke foutmelding geeft ie verder? da's nl ook wel handig om te weten

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Matched: appendchild, removechild
Oke, evenhandler aangepast. thanx
" this command is not supported" is de errormsg.

FF vindt het wel goed allemaal, zoals gewoonlijk :)

wat ik overigens wil is dat als je vast selecteerd dat het een inputveld komt voor je netnummer,
als je mobiel selecteerd komt er gewoon 06 te staan.
Zo kan het ook wat ik wil:

code:
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
function swapType(value)
            {

                //var para = document.getElementById("wop");

                //para.setAttribute('type', 'hidden');


                var para = document.getElementById("phoneForm");
                var para2 = document.getElementById("number");
                var child = document.getElementById("type");

                para.removeChild(child);

                if(value == "vast")
                {
                    var newChild = document.createElement("input");
                    para.insertBefore(newChild,para2);

                    newChild.setAttribute('type', 'text');
                    newChild.setAttribute('id', 'type');
                }
                
                if(value == "mobiel")
                {
                    var newChild = document.createElement("span");
                    para.insertBefore(newChild,para2);

                    newChild.setAttribute('id', 'type');

                    var newChild2 = document.createTextNode("06");

                    newChild.appendChild(newChild2);
                }
        
            }


maar een form op hidden zetten en en ander op een type="text" leek me minder code :>

of zijn er nog betere manieren?

[ Voor 84% gewijzigd door Zoolander op 03-02-2005 22:19 ]

mijn naam slaat nergens op, althans niet op mij :P


Verwijderd

Geen matches
eehm gewoon een veld en dan

dat_ene_veld.value = (value=="vast")? '' : '06';

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Geen matches
daar snap ik niks van...

kan je iets preciezer zijn?

Het idee is namelijk dat er ofwel een <input> komt te staan danwel "06" als platte text

[ Voor 71% gewijzigd door Zoolander op 03-02-2005 23:44 ]

mijn naam slaat nergens op, althans niet op mij :P


  • André
  • Registratie: Maart 2002
  • Laatst online: 08-04 16:23

André

Analytics dude

Geen matches
Is value niet een reserved word? Probeer eens een andere variabele naam.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Geen matches
Zoolander:
daar snap ik niks van...

kan je iets preciezer zijn?
Wat mophor bedoelt is dat wanneer de value die meegegeven wordt aan de functie gelijk is aan 'vast' de waarde van een ander input-veld 06 moet worden en anders niks. Ik zou het ook zo gedaan hebben, met als toevoeging het setten van readonly en een class readonly voor de stylesheet. 't Voordeel is namelijk dat je dan altijd het netnummer meegestuurd krijgt in 't script dat 't formulier af moet gaan handelen, mobiel of niet. zoiets dus:

code:
1
2
3
4
5
<input type="text" name="netnummer" value=""> 
<select name="teltype" onchange="flipz0r(this)">
  <option value="vast">Vast</option>
  <option value="mobiel">Mobiel</option>
</select>

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function flipz0r ( selectElement ) {
   var value = selectElement.options[selectElement.selectedIndex].value;
   var netnummerField = selectElement.form.elements['netnummer'];
   switch ( value ) {
      case 'vast':
         netnummerField.value='';
         netnummerField.readonly=false;
         netnummerField.className='readonly';
      break;
      case 'mobiel':
         // etcetera
      break;
   }
}

[ Voor 11% gewijzigd door drm op 04-02-2005 10:06 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1