Zapp: document.all schneller als document.links ?

Beitrag lesen

Hallo Rolf,

document.all zugriffe scheint der IE bevorzugt zu behandeln!

Ich greife ja nicht auf jeden einzelnen Link zu, sondern setze nur einen body.onclick

Könntest du deinen Code noch mal formatiert posten,
ich bekomm leider sonst nen Knick in der Optik ;)

Es gab da noch kleinere Änderungen, aber im Prinzip ist es dies hier:

-------------------------------------------------

Name='';
Email='';
URL='';
Grafik='';
Params='scrollbars,status,resizable';

document.body.onclick=checkForLink;

function checkForLink(x)  // bei Klick in der Hauptdatei ohne, bei Klick im Popup mit Parameter
{
Base=x?x:window;
ClickObj=Base.event.srcElement;
if(!Base.document.all.tags('DL')[0].contains(ClickObj))   // Klick nicht im Threadbaum?
 {
 if(x&&Base.document.all.tags('TT')[0].contains(ClickObj))   // Klick Postingteil Popup?
  {
  if(ClickObj.tagName=='A')                 // Link erwischt?
   ClickObj.target='_blank';
  else with(Base)
   {
   Range=document.body.createTextRange();  // ff Worterkennung http oder www > Link
   Range.moveToPoint(event.x,event.y);
   Range.expand('word');
   if(Range.text.charAt(0)=="'")
    Range.moveStart('character',1);
   if(Range.text.substr(0,4)=='http'||Range.text=='www')
    {
    Range.moveEnd('sentence',1);
    RText=Range.text;
    Limiter=['\r','\n','"',"'",',','[','(',' ',')',']'];
    for(i in Limiter)
     RText=RText.split(Limiter[i])[0];
    Range.findText(RText);
    Range.execCommand('CreateLink',false,RText.charAt(0)=='w'?'http://'+RText:RText);
    }
   }
  }
 return true;
 }
LinkObj=ClickObj.tagName=='A'?ClickObj:ClickObj.parentNode;   // Zweig: Klick im Threadbaum
if(LinkObj.tagName=='A')
 {
 ThreadPath=[];                                //  ff Ermitteln des Pfades zum geklickten
 Thread=ClickObj;                              //     Link im aktuellen Thread-Baum
 while(Thread.parentNode.parentNode.tagName!='BODY')
  {
  ChildCount=0;
  while(Thread.previousSibling)        // Position auf jeder Objektebene wird ermittelt
   {
   ChildCount++;
   Thread=Thread.previousSibling;
   }
  ThreadPath[ThreadPath.length]=ChildCount;   // Array für die Position im Thread
  Thread=Thread.parentNode;
  }
 ThreadPath.reverse();
 if(!x)                                        // wenn aus Hauptdatei aufgerufen
  {
  pop=open(LinkObj.href+'#a1','',Params);
  MainThread=Thread;
  }
 pop.location.href=LinkObj.href+'#a1';
 checkLoad();
 return false;
 }
}

function checkLoad()
{
count=0;
if(pop.location.href==LinkObj.href+'#a1'&&pop.document.all.bottom)  // Popup geladen?
 setTimeout('insert()',50);
else if(count<50)                               // wenn nicht, weitere 50x abfragen
 {
 count++;
 setTimeout('checkLoad()',500);                // im Abstand von 0.5 sec
 }
}

function insert()
{
if(pop.document.all.url)              // falls nicht die Forums-Fehlermeldung
 {                                   // ...woran man nicht alles denken muß... :)
 pop.location.hash='#a1';
 pop.document.body.onclick=getPopLink;
 with(pop.document.all)
  {
  name.value=Name;                  // ff Formularwerte setzen
  email.value=Email;
  url.value+=URL;
  image.value+=Grafik;
  body.value='Hallo '+tags('H2')[0].innerText.split(':')[0].split(' ')[0]+',\n\n'+pop.document.all.body.value+'\n\nGrüße,\n '+Name;
  with(tags('P')[1])
   if(lastChild.tagName=='A')      // HP-URL angegeben?
    lastChild.target='_blank';
  if(tags('DL')[0])
   tags('DL')[0].outerHTML='';                     // Original-Threadbaum löschen
  tags('H3')[0].outerHTML='<dl><dd id=popThread>'+MainThread.innerHTML+'</dd></dl><h3>Eigene Antwort schreiben</h3>';
  }
 ThrArray=[pop.document.all.popThread,MainThread];
 for(j in ThrArray)
  {
  for(i in ThreadPath)                     // Farbänderungen auf zuvor ermitteltem Pfad
   ThrArray[j]=ThrArray[j].childNodes[ThreadPath[i]];
  ThrArray[j].style.color=j<1?'#ee6600':'#552200';
  }
 }
}

function getPopLink()           // Eventhandler im Popup
{
if(!pop.closed&&pop.event)
 return(checkForLink(pop));
}

void(null);

-------------------------------------------------

Bye, Stefan