Andreas Altherr: Javascript für IE

Hi @ll,
kleines problem, wir haben eine XML Datei, sie beinhaltet eine Button zum sortieren von den inhalten,
mit einem Javascript kann das mit Netscape erreicht werden.
Nur mit dem IEx geht das nicht, unten steht der Code, weiss vieleicht jemand warum das beim IEx nicht geht?
THX schon mal im voraus ;-)))

Der JavaScript Code:

// An inefficient, but effective bubble sort
function sort(collection, key)
{
   var i, j;
   var count = collection.length;
   var parent, child;
  
   for (i = count-1; i >= 0; i--) {
     for (j = 1; j <= i; j++) {
       if (collection[j-1][key] > collection[j][key]) {
          // Move the item both in the local array and
          // in the tree
          child = collection[j];
          parent = child.parentNode;

collection[j] = collection[j-1];
          collection[j-1] = child;
          parent.removeChild(child);      
          parent.insertBefore(child, collection[j]);
       }
     }//end j
   }//end i
}

// Set user properties on the nodes in the collection
// based on information found in its children. For example,
// make a property "Author" based on the content of the
// "Author" element found in the childNode list of the node.
// This makes later sorting more efficient
function collectInfo(nodes, propNames)
{
   var i, j, k;
   var ncount = nodes.length;
   var pcount = propNames.length;

for (i = 0; i < ncount; i++) {
     var node = nodes[i];
     var childNodes = node.childNodes;
     var ccount = childNodes.length;
  
     for (j = 0; j < ccount; j++) {
       var child = childNodes[j];

if (child.nodeType == Node.ELEMENT_NODE) {
         var tagName = child.tagName;

for (k = 0; k < pcount; k++) {
           var prop = propNames[k];
           if (prop == tagName) {
             node[prop] = child.firstChild.data;
           }  
         }
       }    
     }
   }
}
var enabled = true;
function toggleStyleSheet()
{
   if (enabled) {
     document.styleSheets[2].disabled = true;
   }
   else {
     document.styleSheets[2].disabled = false;
   }

enabled = !enabled;
}

// XXX This is a workaround for a bug where
// changing the disabled state of a stylesheet can't
// be done in an event handler. For now, we do it
// in a zero-delay timeout.
function initiateToggle()
{
   setTimeout(toggleStyleSheet, 0);
}

var sortableProps = new Array("Author", "Title", "ISBN");
var books = new Array();

// We uppercase the tagName as a workaround for a bug
// that loses the original case of the tag.
var bookset = document.getElementsByTagName("Book");

// We need to create a "non-live" array to operate on. Since
// we'll be moving things around in this array, we can't use
// the read-only, live one returned by getElementsByTagName.
for (var i=0; i < bookset.length; i++) {
   books[i] = bookset[i];
}

collectInfo(books, sortableProps);

  1. Hi Andreas,

    beim Überfliegen deines Codes ist mir "Node.ELEMENT_NODE" aufgefallen. Dies wird soweit ich weiß nicht vom IE unterstützt, das Äquivalent wäre "if (child.nodeType == 1)" für Elementknoten, und "if (child.nodeType == 3)" für Textknoten.

    Gruß,
    UlfL

    1. Hi Andreas,

      beim Überfliegen deines Codes ist mir "Node.ELEMENT_NODE" aufgefallen. Dies wird soweit ich weiß nicht vom IE unterstützt, das Äquivalent wäre "if (child.nodeType == 1)" für Elementknoten, und "if (child.nodeType == 3)" für Textknoten.

      Gruß,
      UlfL

      THX VIELMALS :-))
      hast uns sehr geholfe damit den ES GEHT *freu*