Ashura: Erweiterung fürs User-JS

Beitrag lesen

puts "Hallo " + gets.chomp + "."

?>
=> Hallo.

Da mich immer gestört hat, dass man zum Wechseln von Thema und / oder Themenbereich immer die Vorschau benötigt, habe ich mir überlegt, die beiden dafür verantwortlichen Formularelemente per User-JS in die Standardansicht einzuhängen. Ich habe natürlich darauf geachtet, dass die Formularelemente an die selbe Stelle wie in der Vorschau eingehängt werden. (Und musste erst einmal über die besondere Eigenschaft der Browser stolpern, dass sie implizit in jedes <table>-Element ein <tbody>-Element einhängen, sofern noch keines vorhanden ist.)

Letztendlich kam folgendes Script dabei heraus, welches per window.onload initialisiert werden sollte. (Warum funktioniert document.onload nur im Opera, nicht aber im FF?)

Im Moment hat der IE auch noch ein Problem mit folgender Zeile:

if(strong[i].getAttribute("class") == "active")

Im SelfHTML-Beispiel zu getAttribute() steht, dass er ab V. 5.x dies unterstützen würde was er ja auch im Beispiel macht. Doch bei obiger Zeile gibt er lediglich „null“ aus.

Wer hierzu (und natürlich auch zum gesamten Skript) Verbesserungsvorschläge hat, möge sie mir bitte mitteilen. Auch wenn Fragen aufkommen sollten, bin ich gewillt, sie meinem Kenntnisstand entsprechend zu beantworten.

Hier nun also das Skript:

  
function inserthelper()  
{  
    var strong = document.getElementsByTagName("strong");  
  
    for(var i = 0;i < strong.length;i++)  
    {  
        if(strong[i].getAttribute("class") == "active")  
        {  
            var title = strong[i].firstChild.nodeValue;  
            var category = strong[i].previousSibling.previousSibling.firstChild.nodeValue;  
        }  
    }  
    if(title && category)  
    {  
        var tbody            = document.getElementsByTagName("tbody")[1];  
        var tr               = document.getElementsByTagName("tr")[5];  
  
        var thematr          = document.createElement("tr");  
        var themath          = document.createElement("th");  
        var thematd          = document.createElement("td");  
        var bereichtr        = document.createElement("tr");  
        var bereichth        = document.createElement("th");  
        var bereichtd        = document.createElement("td");  
  
        var themalabel       = document.createElement("label");  
        var themalabeltext   = document.createTextNode("Thema:");  
        var bereichlabel     = document.createElement("label");  
        var bereichlabeltext = document.createTextNode("Themenbereich:");  
  
        var themainput       = document.createElement("input");  
            themainput.setAttribute("type","text");  
            themainput.setAttribute("name","subject");  
            themainput.setAttribute("id","formular-thema");  
            themainput.setAttribute("value",title);  
            themainput.setAttribute("size","40");  
            themainput.setAttribute("class","eingabefeld");  
  
        var bereichselect    = document.createElement("select");  
            bereichselect.setAttribute("size","1");  
            bereichselect.setAttribute("name","cat");  
            bereichselect.setAttribute("id","formular-themenbereich");  
  
        var bereichoption    = document.createElement("option");  
  
        var bereiche = new Array  
        (  
        "Bitte auswählen!",  
        "ASP",  
        "BARRIEREFREIHEIT",  
        "BROWSER",  
        "CGI",  
        "CSS",  
        "DATENBANK",  
        "DESIGN",  
        "DHTML",  
        "E-MAIL",  
        "FTP",  
        "GRAFIK",  
        "HTML",  
        "HTTP",  
        "INTERNET-ANBINDUNG",  
        "JAVA",  
        "JAVASCRIPT",  
        "MEINUNG",  
        "MENSCHELEI",  
        "PERL",  
        "PHP",  
        "PROGRAMMIERTECHNIK",  
        "PROJEKTVERWALTUNG",  
        "PROVIDER",  
        "RECHT",  
        "SERVER",  
        "SOFTWARE",  
        "SONSTIGES",  
        "VB-SCRIPT",  
        "XML",  
        "XML-DERIVAT",  
        "XSL",  
        "ZUR INFO",  
        "ZU DIESEM FORUM"  
        );  
  
        for(var i = 0; i < bereiche.length;i++)  
        {  
            option = bereichoption.cloneNode(false);  
            if(bereiche[i] == "Bitte auswählen!")  
            {  
                option.setAttribute("value","");  
            }  
            else  
            {  
                option.setAttribute("value",bereiche[i]);  
            }  
  
            if(bereiche[i] == category)  
            {  
                option.setAttribute("selected","selected");  
            }  
            optiontext = document.createTextNode(bereiche[i]);  
            option.appendChild(optiontext);  
  
            bereichselect.appendChild(option);  
        }  
  
        tbody.insertBefore(thematr,tr);  
  
        thematr     .appendChild(themath);  
        themath     .appendChild(themalabel);  
        themalabel  .appendChild(themalabeltext);  
        thematr     .appendChild(thematd);  
        thematd     .appendChild(themainput);  
  
        tbody.insertBefore(bereichtr,tr);  
  
        bereichtr   .appendChild(bereichth);  
        bereichth   .appendChild(bereichlabel);  
        bereichlabel.appendChild(bereichlabeltext);  
        bereichtr   .appendChild(bereichtd);  
        bereichtd   .appendChild(bereichselect);  
    }  
}  

Einen schönen Sonntag noch.

Gruß, Ashura

--
Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
30 Days to becoming an Opera8 Lover -- Opera 8.02 mit Bittorent-Unterstützung
Meine Browser: Opera 8.01 | Firefox 1.0.4 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
[Deshalb frei! - Argumente pro freie Software]