Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[js] setAttribute voor Mozilla & Internet explorer

Pagina: 1
Acties:

Verwijderd

Topicstarter
Voor een ajax page set ik allerlei attributes via setAtribute(attr,value), dat werkt prima in FF maar dus niet in IE

Nou heb ik nogal rondgezocht maar nergens een goede manier gezien om dit in een keer op te lossen, dus toen dacht ik, ik maak deze functie :
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function setAttributeCustom(element,attribute,value){
var browser=navigator.appName


    if (browser == "Microsoft Internet Explorer")
    {
    
     if (attribute == "class") attribute = "className";

    element.attribute = value;
    }
    else
    {
    element.setAttribute(attribute, value)
    }

}


alleen werkt dit niet omdat (volgens mij) javascript de attribute niet als var ziet maar al een property, oid, en ik wil dus dat ie de string in de var attribute gebruikt als property.
Ik heb element.[attribute] geprobeerd (las ik ergens) maar dan krijg ik een error.

Weet iemand hoe ik dit op kan lossen, of hoe ik het hele setAttribute prob op kan lossen?

[ Voor 6% gewijzigd door Verwijderd op 01-02-2006 20:53 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • orf
  • Registratie: Augustus 2005
  • Laatst online: 19:08

orf

setAttribute werkt gewoon in IE, je (nogal ranzige) workaround zou niet nodig moeten zijn. Ik denk dat je probleem ergens anders ligt.

element.attribute zou nog door een eval() heen moeten als je het op je huidige manier wilt doen.

(misschien moet deze thread even verplaatst worden naar Webdesign)

Verwijderd

Topicstarter
excuus ik heb het de eerste keer niet gezien, was me er idd niet van bewust dat javascript niet onder webscripting viel, zal niet meer gebeuren.
setAttribute werkt gewoon in IE, je (nogal ranzige) workaround zou niet nodig moeten zijn. Ik denk dat je probleem ergens anders ligt.

element.attribute zou nog door een eval() heen moeten als je het op je huidige manier wilt doen.
mee eens, al vind ik ranzig wel erg ferme taal :P maar ik ben er ook niet echt gelukkig mee.
Hoe het ook zij, het probleem met setAtrribute is, dat als ik dat in IE gebruik hij niet 'update zeg maar', dus misschien veranderd hij de class wel, maar dat correspondeert dan niet met de css

voorbeeld: div_element.setAttribute('class','rood')

Wordt in FF een mooie rode div, maar in IE gebeurt er niets, terwijl als ik zeg:
div_element.className = 'rood', het wel geupdate wordt in IE, vandaar mijn 'ranzige' workaround, die overigens niet werkt, hence het topic

[ Voor 46% gewijzigd door Verwijderd op 01-02-2006 21:10 ]


  • orf
  • Registratie: Augustus 2005
  • Laatst online: 19:08

orf

JavaScript:
1
2
3
4
5
6
7
function setAttributeCustom(element, attribute, value){
  if (attribute == 'class'){
    element.className = value;
  } else {
    element.setAttribute(attribute, value);
  }
}


Werkt zoiets?

Verwijderd

Topicstarter
ja maar dan werkt het alleen voor class, dan zou ik voor alle attributes een switch moeten maken, is ook niet echt mooi

hmm, op zich geeft ie alleen bij classes problemen natuurlijk, moet ik es over nadenken of dat voldoende is

maar dan kan ik natuurlijk net zo goed als ik een class wil setten meteen className gebruiken.
Vind ik alleen ook niet echt een mooie oplossing, maar dan werkt het wss en wel, en ook sneller

Maar bij de attribute style werkt het ook niet... dus dat maakt dan al 2, tenzij ik alle styles in css zet, wat eigenlijk ook moet....

interessante monoloog hier B)

[ Voor 90% gewijzigd door Verwijderd op 01-02-2006 21:22 ]


  • orf
  • Registratie: Augustus 2005
  • Laatst online: 19:08

orf

beetje ge-googled: http://www.quirksmode.org...IE_when_used_with_th.html

CSS geeft problemen vanwege de interpretatie van IE; class en style zijn de twee die dus problemen zullen geven.

Het lijkt me makkelijk om die 2 toch in de functie in te bouwen, zodat je altijd deze aan kunt roepen, zonder na te hoeven denken over het attribute.

:)

Verwijderd

Topicstarter
maar hoe pak ik dat met style aan dan?

want ik kan niet gewoon zeggen element.style = "position: bla"

dus dan komt het er alsnog op neer dat ik alle styles maar in de css moet definieren, tenzij iemand anders iets beters weet?

[ Voor 76% gewijzigd door Verwijderd op 01-02-2006 21:39 ]


Verwijderd

via setAttribute zou idd alles moeten werken, ik loop echter nu net tegen precies hetzelfde aan dat de style (die aan die class hangt) niet geupdate wordt.

En ik werk in een xml omgeving, dus iets als className werkt bij mij iig helemaal niet

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
classes kan je met .className zetten, en style's zet ik zelf altijd op de volgende manier:

element.style.display = 'block'.

Dit werkt prima cross-browser.

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 19:08

orf

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
function setAttributeCustom(element, attribute, value){
  if (attribute == 'class'){
    element.className = value;
  } else if(attribute == 'style'){
    element.style.cssText = attribute;
  } else {
    element.setAttribute(attribute, value);
  }
}

setAttributeCustom(document.getElementById('e'), 'style', 'border:1px solid #f00');

[ Voor 25% gewijzigd door orf op 01-02-2006 21:57 ]


Verwijderd

Topicstarter
vet .cssText, die kende ik nog niet, gaan we meteen proberen (morgen)
Pagina: 1