Hallo,
Obwohl mir das Node-Modell halbwegs klar ist: wieso funktioniert dann
function rem_class(name) {
name.removeAttribute("class");
}
nicht
Wie gehabt, die Geckos machens, M$IE und Opera nicht.
Welcher Opera?
Der IE machts nicht, weil er den Attributknoten "class" per default als leeren Attributknoten mitführt. Dieser lässt sich hier nicht löschen.
Beispiel:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Titel</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<style type="text/css">
<!--
.test {background-color:red;}
-->
</style>
<script type="text/javascript">
<!--
function add_class(name) {
try {
//IE hat hier bereits einen leeren Attributknoten "class".
var myClassAttr = name.getAttributeNode("class");
alert(myClassAttr.name + ":" + myClassAttr.value);
name.focus();
} catch (e) {
//Geckos und Opera 8.5 haben diesen leeren Attributknoten "class" nicht.
alert(e);
name.focus();
}
var myClassAttr = document.createAttribute("class");
myClassAttr.value = "test"
name.setAttributeNode(myClassAttr);
}
function rem_class(name) {
var myClassAttr = name.getAttributeNode("class");
alert(myClassAttr.name + ":" + myClassAttr.value);
name.removeAttributeNode(myClassAttr);
try {
//IE hat hier immer noch einen leeren Attributknoten "class".
myClassAttr = name.getAttributeNode("class");
alert(myClassAttr.name + ":" + myClassAttr.value);
} catch (e) {
//Geckos und Opera 8.5 haben hier keinen Attributknoten "class" mehr.
alert(e);
}
}
//-->
</script>
</head>
<body>
<p><input onfocus="add_class(this);" onBlur="rem_class(this);"></p>
</body>
</html>
viele Grüße
Axel