Don P: Geniale Cross-Browser Funktion (?)

Beitrag lesen

Hallo,

Bin da eben auf eine Funktion gestoßen, die angeblich so gut wie jedes Element anhand eines übergebenen id - oder name-Attributs zurückgeben kann. Die will ich euch nicht vorenthalten:

  
function MWJ_findObj( oName, oFrame, oDoc ) {  
  /* if not working on a layer, document should be set to the  
  document of the working frame  
  if the working frame is not set, use the window object  
  of the current document  
  WARNING: - cross frame scripting will cause errors if  
  your page is in a frameset from a different domain */  
  if( !oDoc ) { if( oFrame ) { oDoc = oFrame.document; } else { oDoc = window.document; } }  
  
  //check for images, forms, layers  
  if( oDoc[oName] ) { return oDoc[oName]; }  
  
  //check for pDOM layers  
  if( oDoc.all && oDoc.all[oName] ) { return oDoc.all[oName]; }  
  
  //check for DOM layers  
  if( oDoc.getElementById && oDoc.getElementById(oName) ) {  
    return oDoc.getElementById(oName); }  
  
  //check for form elements  
  for( var x = 0; x < oDoc.forms.length; x++ ) {  
    if( oDoc.forms[x][oName] ) { return oDoc.forms[x][oName]; } }  
  
  //check for anchor elements  
  //NOTE: only anchor properties will be available,  
  //NOT link properties (in layers browsers)  
  for( var x = 0; x < oDoc.anchors.length; x++ ) {  
    if( oDoc.anchors[x].name == oName ) {  
      return oDoc.anchors[x]; } }  
  
  //check for any of the above within a layer in layers browsers  
  for( var x = 0; document.layers && x < oDoc.layers.length; x++ ) {  
    var theOb = MWJ_findObj( oName, null, oDoc.layers[x].document );  
      if( theOb ) { return theOb; } }  
  
  //check for frames, variables or functions  
  if( !oFrame && window[oName] ) { return window[oName]; }  
  if( oFrame && oFrame[oName] ) { return oFrame[oName]; }  
  
  //if checking through frames, check for any of the above within  
  //each child frame  
  for( var x = 0; oFrame && oFrame.frames && x < oFrame.frames.length; x++ ) {  
    var theOb = MWJ_findObj( oName, oFrame.frames[x], oFrame.frames[x].document ); if( theOb ) { return theOb; } }  
  
  return null;  
}

Man übergibt einfach als Parameter oName einen id- oder name-Wert.
Das Ding soll Cross-Browser-tauglich sein (Stand Januar 2008) und sogar mehrere Frames eines frameset durchforsten können. Dazu gibt man als oFrame einfach den frame-Namen an, ab dem die Frame-Hierarchie nach unten durchgecheckt werden soll.

Ist vielleicht etwas zuviel Overhead für umfangreiche Projekte, aber um mal eben etwas zu coden oder bzw. testen scheint mir das Ding ideal. Man braucht sich erst einmal keine Gedanken um den richtigen Aufruf der richtigen Methoden für alle möglichen Elemente zu machen, wenn es denn funktioniert.

Habe es nämlich noch nicht getestet. Viel Spass damit!

Gruß, Don P