setAttribute() im IE

Heyho

ich hab für meine neue website mit ajax gearbeitet.
http://beta.verfriemelt.org/

dazu ne kleine js function geschrieben, was einfach alle normalen links umarbeitet:

Code:
function replaceLinks() {
    
    var links = document.getElementsByTagName("a"); 
    for (var i = 0; i < links.length; i++) { 
        
        href = links[i].href; 
       
        if (href.substring(href.length,href.length-1) != "#") {
            links[i].setAttribute("onclick","sndReq('"+ href +"')");
            links[i].href = "#";
        }
    }
}

das problem: der IE *suprise*
der kommt mit dem setAttribute nicht klar.
wie bekomm ich es hin, ähnlichen effekt auch für den IE zu bauen?

habs geschafft... ;D

Code:
function replaceLinks() {
    
    var name = navigator.userAgent.toLowerCase();
    //InternetExplorer
    var ie = (name.indexOf("msie") > -1);
    
    var links = document.getElementsByTagName("a"); 
    
    for (var i = 0; i < links.length; i++) { 
        
        var href = links[i].href; 
       
        if (href.substring(href.length,href.length-1) != "#" && href.substring(0,10) != "javascript") {
            if (ie) {
                links[i].href = "javascript:sndReq('" + href + "')";
            } else {
                links[i].setAttribute("onclick","sndReq('"+ href +"')"); //geht im IE nich
                links[i].href = "#";
            }
        }
    }
}
 
Deine MSIE-Variante müsste doch eigentlich für alle Browser funktionieren, oder? Wenn ja könntest du dir ein wenig Code sparen ;)
 
Du könntest das ganze aber auch noch anders machen, und zwar so:

Code:
links[i].onclick = function() { sendReq(href); };

Das funktioniert im ie sowie im ff.
 
seltsam, genau das hatte ich probiert, aber das ging bei mir nirgendswo.
vielleicht habsch da was vertippt oder so!

aber gut zu wissen, dass das auch geht.
 
Events sind eigentlich auch keine Attribute. Für diese gibt es beim IE attachEvent und sonst addEventListener.
 
Ich verwende immer folgende Javascript-Funktion zum Anhängen von Events. Sie soll angeblich in allen wesentlichen Browsern funktionieren. Lässt sich also auch komplett in eine unabhängige Javascript-Datei auslagern, ohne Javascript in den HTML-Quelltext schreiben zu müssen.
Code:
function addEvent(obj, evType, fn){ 
 if (obj.addEventListener){ 
   obj.addEventListener(evType, fn, false); 
   return true; 
 } else if (obj.attachEvent){ 
   var r = obj.attachEvent("on"+evType, fn); 
   return r; 
 } else { 
   return false; 
 } 
}

addEvent(window, 'load', myFunction);
mfg, metax.
 
Du könntest die Version von Metax sogar noch etwas erweitern indem du folgende etwas abgeänderte Version benutzt (bei neuen Browsern spielt es keine Rolle, aber bei den uralten schon noch):

Code:
function addEvent(obj, type, fn){
 if(obj.addEventListener){
  obj.addEventListener(type, fn, false);
 }else if (obj.attachEvent){
  obj["e_" + type + "_" + fn] = fn;
  obj[type + fn] = function(){
   obj["e_" + type + "_" + fn](window.event);
  }
  obj.attachEvent( "on" + type, obj[type + fn] );
 }else if(!(obj["on" + type] = fn)){
  return false;
 }
 return true;
}

function removeEvent(obj, type, fn){
 if(obj.removeEventListener){
  obj.removeEventListener(type, fn, false);
 }else if(obj.detachEvent){
  obj.detachEvent("on" + type, obj[type + fn]);
  obj[type + fn] = null;
  obj["e_" + type + "_" + fn] = null;
 }else if(obj["on" + type]){
  obj["on" + type] = null;
 }else{
  return false;
 }
 return true;
}

PS: Ich habs kopiert, da ich zu faul war es selbst zu schreiben, aber es sollte stimmen.
 
Zurück
Oben