Wie kann ich auf JavaScript umrüsten?

A319

Grünschnabel
Hallo,

ich hab ein Problem. Auf meinre Site (http://latino.lima-city.de) habe ich ein Latein-Programm auf JScript-Basis. Leider funktioniert dieses Script nur auf dem Internet Explorer und beim Windows-Betriebssystem. Hatt jemand eine Idee, wie ich das auf JavaScript "umformen" kann?
 
Du kannst die "Datenbank" per XMLHttpRequest bzw. Äquivalent zuerst herunterladen und selber parsen (am ; splitten reicht ja schon) und in ein Array ablegen. Der Rest wird ähnlich sein, du musst nur noch dieses Array durchsuchen und entsprechend ausgeben.
 
Ja ok. Ich hab genau davon nicht unbedingt sehr viel Ahnung. Besser gesagt gar keine. a muss ich wohl erst Mal nachfragen was XMLHttpRequest ist. :confused:
 
Nein es wird nur auf dem IE laufen , weiss nicht ob es auch den IE unter Linux gibt oder Mac.Alternativ könnte man sich es im Firefox anschaun unter dem IE Tab.

Hier liegt der Teufel im Detail wenn man sich dein JS mal anschaut.

Code:
    document.all

Diese Anweisung kennt nur der Internet Explorer , bei allen anderen Browsern sagen wir mal den guten Browsern müsste man auf die Elemente zugreifen mit document.getElementsById(String id) oder document.getElementByTagName(String tagName). Letzters gibt ein Array zurück von allen Knoten die den Tagname haben. Somit würde ich dann document.getElementsById empfehlen es sei denn man hat Lust sich durch die Knoten zu wuseln um den richtigen zu finden.

Zumal beide Anweisungen kennt auch der IE.
 
Zuletzt bearbeitet:
hatte langeweile =)
die datenbank heißt db.txt
viel spaß =)

HTML:
<html>
    <head>
        <style type='text/css'>
            body, div {
                font-size: 11px;
                font-family: 'sans-serif', 'Arial';
                background-color: #e0e0e0;
            }
            input  {
                font-size: 11px;
                font-family: 'sans-serif', 'Arial';
            }
            #content, .wait {
                margin: auto auto;
                position: relative;
                
                width: 480px;
                text-align: center;
            }
            #content {
                display: none;
            }
            #result {
                text-align: justify;
            }
            ul {
                margin-top: 3px;
            }
            input {
                border: 1px solid #808080;
            }
        </style>
        <script type='text/javascript'>
            function GetXMLHttpRequest() {
                var try_these = [
                    function () { return new XMLHttpRequest(); },
                    function () { return new ActiveXObject('Msxml2.XMLHTTP'); },
                    function () { return new ActiveXObject('Microsoft.XMLHTTP'); },
                    function () { return new ActiveXObject('Msxml2.XMLHTTP.4.0'); },
                ];
                for (var i = 0; i < try_these.length; i++) {
                    var func = try_these[i];
                    try {
                        return func();
                    } catch (e) { }
                }
            }
            
            var xml = null;
            var database = [];
            
            function onReadyStateChange() {
                if( xml && xml.readyState == 4 ) {
                    var lines = xml.responseText.split( "\n" );
                    for( var i = 1; i < lines.length; i++ ) {
                        var entries = lines[i].split( ";" );
                        if( entries.length == 4 ) {
                            var entry = {};
                            
                            entry.deutsch = entries[2];
                            entry.keyword = entries[0].toLowerCase();
                            entry.latein = entries[1];
                            entry.lektion = entries[3];
                            
                            var list = "<ul>";
                            var de = entry.deutsch.split( ',' );
                            for( var j = 0; j < de.length; j++ )
                                list += "<li>" + de[j].replace( /^\s+/, "" ) + "</li>";
                            
                            entry.de_list = list + "</ul>";
                            
                            database.push( entry );
                        }
                    }
                    document.getElementById( 'wait' ).style.display = "none";
                    document.getElementById( 'content' ).style.display = "block";
                }
            }
            
            function RequestDatabase() {
                xml = GetXMLHttpRequest();
                xml.onreadystatechange = onReadyStateChange;
                xml.open( "GET", "db.txt", true );
                xml.send( null );
            }
            
            function SearchQuery( query ) {
                var results = [];
                query = query.toLowerCase();
                
                for( var i = 0; i < database.length && results.length < 100 && query.length; i++ ) {
                    if( database[i].keyword.indexOf( query ) != -1 ) {
                        results.push( "<b>" + database[i].latein + "</b>" + 
                                "<br><div style='margin-left: 16px; margin-bottom: 16px;'>" +
                                "<small><i>(Lektion " + database[i].lektion + "</i></small>)<br>" +
                                database[i].de_list + "</div>" );
                    }
                }
                
                if( results.length ) {
                    results.splice( 0, 0, "<b>" + results.length + "</b> Suchergebnisse<br><br>" );
                } else {
                    results.push( "<b>Keine Vokabeln bei der Suche nach '<b>" + query + "</b>' gefunden" );
                }
                
                document.getElementById( 'result' ).innerHTML = results.join( "" );
            }
            
            window.onload = RequestDatabase;
            
        </script>
    </head>
    <body>
        <center>
            <div id='content'>
                <h2>Latein W&ouml;rterbuch</h2>
                <form onSubmit='SearchQuery( document.getElementById( "q" ).value ); return false;'>
                    <input id='q'> <input type='submit' value='Suchen'>
                </form>
                <br>
                <hr>
                <br>
                <div id='result'></div>
                <br>
                <hr>
            </div>
            <div id='wait'>
                Bitte warten...<br>
                Datenbank wird geladen...
            </div>
        </center>
    </body>
</html>
 
Also. Ich habe jetzt das Script umgerüstet. Es gibt KEIN document.all mehr. :) Dennoch will es nicht funktionieren.
(Danke für das Script. Aber ich will mein Script behalten und 2. es hat ActiveX und könnte geblockt werden von irgendwelchen Blockern)
So. Das Script sieht jetzt so aus.

----------------------------------------------------------------------------------------------------
Code:
var x = "";
var c = 0;
function Suchen () {
  x = 11;
  window.setTimeout("Suchena()", 0)
}
function Suchena () {
  var i = 0;
  var z = 0;
  var a = document.Eingabe.Sucheingabe.value.substr(0, x);
  var b = a + "*";
  document.getElementById("Anzeigetabelle").style.display = "none";
  var Suchausdruck = "";
  var Suchbegriffe = 0;

  if (a != "") {
    Suchausdruck = Suchausdruck + "Suchbegriff = " + b;
    Suchbegriffe++;
    } else {
      if (document.Eingabe.Lektion.value != "") {
        } else {
          document.getElementById("Treffer").innerText = "0 Suchtreffer!";
          document.getElementById("Tabelle").innerText = "Keinen Suchbegriff oder eine Lektion Erkannt";
          i++;
        }
  }
  if (document.Eingabe.Lektion.value != "") {
    if (Suchbegriffe > 0) {
      Suchausdruck = Suchausdruck + " & Lektion = " + document.Eingabe.Lektion.value;
    } else {
      Suchausdruck = Suchausdruck + "Lektion = " + document.Eingabe.Lektion.value;
    }
    Suchbegriffe++;
  }
  document.getElementById("Begriffe").object.Filter = Suchausdruck;
  document.getElementById("Begriffe").Reset();
  document.getElementById("Anzeigetabelle").dataSrc = "#Begriffe";
  if (i < 1) {
    if (Begriffe.recordset.recordCount < 1) {
      if(x == 0) {
        document.getElementById("Tabelle").innerText = "Mögliche Fehlerquellen: Kontrollieren Sie die Rechtschreibung. Nomen können nur im Nominativ Sg. oder im Genitiv Sg. gesucht werden. Verben können nur im Infinitiv gesucht werden. Es gibt nur die Lektionen 1-50. ";
        document.getElementById("Treffer").innerText = "0 Suchtreffer! zum Suchbegriff " + document.Eingabe.Sucheingabe.value;
      } else {
        document.getElementById("Tabelle").innerText = "Bitte Warten!";
        document.getElementById("Treffer").innerText = "";
      }
      z++;
    }
  }
  if (document.getElementById("Begriffe").recordset.recordCount < 101) {
    if (i < 1) {
      if (z < 1) {
        document.getElementById("Anzeigetabelle").dataPageSize = Begriffe.recordset.recordCount;
        document.getElementById("Treffer").innerText = Begriffe.recordset.recordCount + " Suchtreffer!";
        document.getElementById("Anzeigetabelle").style.display = "block";
        document.getElementById("Tabelle").innerText = "";
        }
      }
  }
  if (document.getElementById("Begriffe").recordset.recordCount > 100) {
  if (i < 1) {
    if (z < 1) {
      if (document.getElementsByName("Option")[0].checked == true) {
        document.getElementById("Anzeigetabelle").dataPageSize = Begriffe.recordset.recordCount;
        document.getElementById("Treffer").innerText = Begriffe.recordset.recordCount + " Suchtreffer!";
        document.getElementById("Anzeigetabelle").style.display = "block";
        document.getElementById("Tabelle").innerText = "";
      } else {
        document.getElementById("Treffer").innerText = "Zu viele Suchtreffer!";
        document.getElementById("Tabelle").innerText = "Fehlerquelle: Es wurden mehr als 100 Datensätze gefunden. Falls Sie wollen, dass alle Datensätze angezeigt werden, können Sie dies bei den Einstellungen einstellen (Wenn Sie diese Einstellung aktivieren, könnte dies eventuell sehr viel Zeit in Anspruch nehmen und ihren Rechner vorrübergehend auslasten). Das Menü befindet sich unten auf der Internetseite.";
        }
      }
    }
  }
  if (x > 0) {
    if (document.Eingabe.Sucheingabe.value != "") {
      if (Begriffe.recordset.recordCount == 0) {
        c = 1;
        window.setTimeout("substr()", 0);
      }
    }
    if (document.Eingabe.Lektion.value != "") {
      if (c == 0)
        if (Begriffe.recordset.recordCount == 0) {
          window.setTimeout("substr()", 0);
        }
      }
    c = 0;
  }
}
function substr () {
  x = x - 1;
  window.setTimeout("Suchena()", 0);
}
----------------------------------------------------------------------------------------------------

Ich hab es noch recht einfach gelassen. (!) An alle "Klugsch***er": Das soll jetzt auch erst mal so bleiben :)

So, die Sache ist nun, es will trotzdem nicht funktionieren. hm...

PS. Das Script kann man sich auch hier noch mal angucken: http://latino.lima-city.de/Uebersetzen.js
 
Zuletzt bearbeitet:
und was ist mit
Code:
<object id="Begriffe" classid="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83">
 <param name="DataURL" value="Latein-Datenbank.txt">
 <param name="UseHeader" value="true">
 <param name="Filter" value="">
 <param name="FieldDelim" value=";">
</object>


das ist doch code, der nur im internet explorer funktioniert. die andere möglichkeit (was du als activeX erkannt hast) ist einfach AJAX, das ist portabel und funktioniert überall. denk nochmal drüber nach =)
 
OK. Danke. :)
Na dann muss ich ja noch mal völlig umbauen.
Aber noch eine Frage: Bei dem gegebenen weiteren Beispiel hab ich noch eine Frage: Ich konstruier ich die Datenbank?
 
da brauchst du nichts mehr konstruieren =) Ich habe es so geschrieben, dass es sich die db.txt vom Server läd (genau die selbe Datei, die du jetzt schon als Datenbank.txt oder so gespeichert hast), Zeile für Zeile ausließt und in die entsprechenden Einzelteile zerlegt. Schau mal in die Funktion onReadyStateChange, da wird die Datei empfangen und zerlegt
 

Neue Beiträge

Zurück