Denne funktion kaldes med selector, property og nyværdi - små bogstaver, hvor ikke javascript udtrykkelig forlanger noget andet:
function changeCSSProperty(clss,propty,newValue){ var ie = (document.styleSheets[0].rules); var moz = (document.styleSheets[0].cssRules); if(!(ie||moz))return; for(i=0;document.styleSheets.length>i;i++){ css = (ie)?document.styleSheets[i].rules:document.styleSheets[i].cssRules; for(j=0;css.length>j;j++){ if(css[j].selectorText.toLowerCase()==clss){ eval("css[j].style."+propty+"='"+newValue+"'"); return; } } } }
Man kan ikke tage fat i rules, som ikke findes i forvejen, så denne metode dur _kun_ overfor definerede style-rules (altså ikke inline-rules, men det ser heller ikke ud til, at det er det du vil have !-)
PS. Javascript forlanger udtrykkelig store bogstaver i bl.a. præcis de ovenstående properties, nemlig: backgroundColor og fontFamily -- der skal bruges interCap-formatet, når properties adresseres vha. javascript (altså bindestreger fjernes og erstattes af et stort bogstav som det næste !-)
PPS. Der er specielle problemer hvis en property indeholder ' -- pt. æder den "" men ikke ' ...
yeps... og da jeg så endelig havde løsningen parat, så havde du lige kommet med et svar *LOL* :-/ --- men derfor skulle pierre da ikke snydes for min løsning heller :-)))
Især gik det mig på at IE6.0 IKKE godtog stylesheet[#].cssRules som ellers er w3c standard... MAC versionen af IE5 gør - men åbenbart ikke IE 5/6 (PC)... Det brugte jeg oceaner af tid på :-/
Jeg vil sige at din er meget smartere - men burde der ikke laves nogle "hop-ud-af-løkke-hvis-rulen-findes"-struktur (som jeg var igang med at implementere med while-løkke (som dog mangler det famøse "break")
Jeg måtte pille lidt, men ud fra min reference så det ikke ud til at der var en tilstrækkelig sikker metode, som opfyldte de andre krav jeg havde fået opfyldt ...
-- og det er klart et problem, ved voldsommere opdateringer, men jeg tror ikke li'e på, at man skal opdatere mange properties på een gang, så den købte jeg ...
Bare fordi, jeg ville have en generisk, for man kunne jo bare tage fat med en konkret property -- altså lave en funktion, som ændrede backgroundColor som din -- det var for kedeligt !-)
-- og overvej lige et af alternativerne, som er at skifte className på et antal elementer ...
roenving >> min kode var måske kedelig - men var også kun ment som en proof-of-concept --- ikke den store forkromede generiske løsning, som du har lagt for dagen.. Det er også derfor at jeg selv har taget din kode til mig (til mit private kode-bibliotek) i stedet for min egen...
Helt fint, men jeg blev lidt irriteret på mig selv, da jeg så Pierres spørgsmål -- det kan vel ¤#¤#%&¤#%¤# ikke være så svært at lave den generisk ?-)
-- og man skulle nok iøvrigt implementere din tilføjelse, så er det _kun_ javascript-property'en som _skal_ have et bestemt store/små-bogstaver-forhold !-)
som foriøvrigt nok burde hedde en selector, idet du også kunne sende "h1" eller "#topBar" afsted til funktionen :-)...
stærkt påvirket af din kode er følgende stump kommet i mit bibliotek : <script type="text/javascript"> ieRules = (document.styleSheets[0].rules); mzRules = (document.styleSheets[0].cssRules);
function getRuleList( stylesheet ) { return (mzRules)?stylesheet.cssRules:stylesheet.rules; }
-- hov, jeg tror ikke du må bruge ordet property, det var den første fejl jeg fik !-)
-- godt nok står hverken selector, property eller value på listen over reserverede ord, men der forsvandt altså en fejl, da jeg rettede til clss og propty ...
-- og er det ikke lidt fjollet at lægge en oneliner ud som funktion ?-)
jeg får ingen fejl i IE 6.0 og Moz1.4 med at bruge property - men man kunne jo selvfølgelig lave dem om til sel, prop og val - for at undgå katastrofen...
ang onlineren - jo .. jeg kan se at jeg ikke har fået refaktoreret koden ordenligt -den vil selvfølgelig ryge ned i changeCSSProperty-funktionen som
Jeg tror man kan sige at risikoen foreligger *lol*
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.