[JS] IE parent.removeChild verwijdert class niet?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik heb het volgende:
HTML:
1
<textarea class="form-textarea" id="post-body"></textarea>

Middels een stukje javascript wil ik deze textarea vervangen door een simpele editor. Hiervoor moet ik o.a. ook een div'je om die textarea maken:
JavaScript:
1
2
3
4
var container = createNode('div', {'class' : 'editor ' + textarea.id});
this.textarea = parent.removeChild(textarea);
this.textarea.setAttribute('class', 'editor-textarea');
container.appendChild(this.textarea);

In FF krijg ik dan de volgende sourcechart:
HTML:
1
2
3
<div class="editor post-body">
  <textarea class="editor-textarea" id="post-body"></textarea>
</div>

In IE krijg ik echter het volgende:
HTML:
1
2
3
<div class="editor post-body">
  <textarea class="form-textarea" id="post-body" class="editor-textarea"></textarea>
</div>

Met andere woorden, hij voegt een class attribuut toe in plaats van de oude te vervangen. Dus toen probeerde ik eerst de oude class expliciet te verwijderen:
JavaScript:
1
2
3
4
5
var container = createNode('div', {'class' : 'editor ' + textarea.id});
this.textarea = parent.removeChild(textarea);
this.textarea.removeAttribute('class');
this.textarea.setAttribute('class', 'editor-textarea');
container.appendChild(this.textarea);

Maar dit levert hetzelfde (foute) resultaat op. Wat doe ik verkeerd en hoe kan ik IE dezelfde output laten genereren als FF?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 09:58

crisp

Devver

Pixelated

in IE zal je className moeten gebruiken ism setAttribute (bekende DOM-incompatibiliteit), makkelijker is echter om gewoon dit te doen:
JavaScript:
1
this.textarea.className = 'editor-textarea';

;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
crisp schreef op zaterdag 03 mei 2008 @ 23:36:
in IE zal je className moeten gebruiken ism setAttribute (bekende DOM-incompatibiliteit), makkelijker is echter om gewoon dit te doen:
JavaScript:
1
this.textarea.className = 'editor-textarea';

;)
crisp, dank je voor je snelle reaktie! Ik heb nu jouw oplossing gebruikt, maar is het dan niet handiger om een wrapper rond setAttribute te schrijven? Pseudo:
JavaScript:
1
2
3
4
5
6
function setCorrectAttribute(attr, value) {
  if (browser = IE) {
    if (attr == 'class') attr = 'className';
  }
  setAttribute(attr, value);
}

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 09:58

crisp

Devver

Pixelated

Reveller schreef op zaterdag 03 mei 2008 @ 23:42:
[...]

crisp, dank je voor je snelle reaktie! Ik heb nu jouw oplossing gebruikt, maar is het dan niet handiger om een wrapper rond setAttribute te schrijven? Pseudo:
JavaScript:
1
2
3
4
5
6
function setCorrectAttribute(attr, value) {
  if (browser = IE) {
    if (attr == 'class') attr = 'className';
  }
  setAttribute(attr, value);
}
Zoiets kan je doen, en veel libraries doen dat ook ;)

Naast 'class' zijn het 'for' attribuut (htmlFor gebruiken in IE), 'style' en eventhandlers notoire pijngevallen ism setAttribute in IE. IE8 zou dit overigens moeten fixen.

Intentionally left blank