Axel Richter: Anschlussfrage: removeAttribute() vs. IE/OP

Beitrag lesen

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