Thomas Meinike: CSS - Styles auslesen

Beitrag lesen

Hallo,

Wie kann ich nun aus meinem JavaScript heraus den Wert "color" von a.mainmenu und a.mainmenu:hover auslesen, damit ich das Script ohne es umzuschreiben auch einsetzen kann, wenn ich für eine andere Seite ein anderes CSS verwende?

Ueber die document.styleSheet-Collection kann man das unter IE und Mozilla so realisieren:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test by TM 05/03</title>
<link rel="stylesheet" href="extern.css" type="text/css">
<script language="JavaScript" type="text/javascript">
<!--

function changeSelectorProperty(sel,prop,val)
{
  var rules,docstyle=document.styleSheets.item(0);
  if(docstyle.rules)rules=docstyle.rules;        // IE
  if(docstyle.cssRules)rules=docstyle.cssRules;  // Mozilla
  var rl=rules.length;

for(var i=0;i<rl;i++)
  {
    if(rules.item(i).selectorText.toLowerCase()==sel.toLowerCase())rules.item(i).style[prop]=val;
  }
}

//-->
</script>
</head>
<body>
<a class="mainmenu" href="test.htm">Testlink</a>
<br><br>
<a href="javascript:changeSelectorProperty('a.mainmenu','color','#0000CC');changeSelectorProperty('a.mainmenu:hover','color','#000000')">Test</a>
</body>
</html>

In extern.css steht:

a.mainmenu { font-family: Arial, Helvetica, sans-serif; font-size: 15px; color: #009900; text-decoration: none; font-style:italic; }
a.mainmenu:hover { font-family: Arial, Helvetica, sans-serif; font-size: 15px; color: #FF0000; text-decoration: none; font-style:italic; font-weight:bold; }

Ich habe nur die Ausgangslinkfarbe von #FFFFFF auf #009900 veraendert. Der Testlink ist anfangs gruen und wird beim Hover rot. Nach dem Anklicken von "Test" ist der Link blau und wird beim Hover schwarz.

Die Funktion changeSelectorProperty(sel,prop,val) uebernimmt -- wie zu sehen -- einen Selectornamen (sel), die zu aendernde Eigenschaft (prop) und den neuen Wert (val).

Wenn ein vorhandener Wert ausgelesen werden soll, also hier die Farbe, dann einfach abfragen nach: rules.item(i).style[prop].

MfG, Thomas