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