JS zum ausführen von HTML-anweisungen
Hallo Leute
Ich habe eine Code mit dem ich mir einer Tabelle aus einer Textdatei erzeuge. Wollt jetzt wissen wie ich diesen Code erst ausführen kann wenn ich auf einen Verweis oder Button geklickt habe. Nachmöglichkeit sollte das ganze mit JAvascript oder HTML erfolgen.
<html>
<head>
<title>DHTML-Datenanbindung mit IE</title>
</head>
<body>
<object id="CDDaten" classid="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83">
<param name="DataURL" value="cd-daten.txt"> <!-- gewünschte Datei ansprechen -->
<param name="UseHeader" value="true"> <!-- erste Zeile wird nicht als Datensatz interpretiert (Definition der Feldnamen)-->
<param name="FieldDelim" value=";"> <!-- Angabe des Feldtrennzeichens -->
</object>
<form>
<!-- id="DatenTabelle -> Name angeben -->
<!-- datasrc="'CDDaten" -> Bezugnahme auf die erxterne Datendatei -->
<!-- # -> Bezug zwischen Tabbelle und Datei wird hergestellt -->
<table id="DatenTabelle" datasrc="#CDDaten" width=100%>
<tr>
<td>
<span datafld="CD-Name"></span>
</td>
<td>
<span datafld="Interpret"></span>
</td>
<td>
<span datafld="Lieder"></span>
</td>
</tr>
</table>
</form>
</body>
</html>
Code funktioniert nur im IE, nicht im Firefox.
Tschau Jessica
Antwort schreiben
Antwort 1 von rfb vom 17.04.2019, 20:41 Options
ich würde dir ja empfehlen das mit AJAX zu lösen (funktioniert in IE, FF und Opera sowie den meisten anderen aktuellen Browsern soweit JavaScript aktiviert ist) statt mit diesem object. Wie das geht kannst du hier erfahren:
AJAXAnsonsten würde ich dir die JavaScript-Funktion
innerHTML ans Herz legen. Entgegen der Angaben in SelfHTML funktioniert innerHTML auch ohne
document.all
.
Antwort 2 von Jessica vom 17.04.2019, 21:23 Options
Hallo
habe das mit AJAX schon mal probiert (mit eurer Hilfe aus dem Forum).
Hat aber nicht richtig funktioniert, da er mir die Datei nicht in Form einer tabelle anzeigte.
Möchte gerne die Tabelle auswerten und dazu muss ich auf die Inhalte der Datei zugriefen. Da ich nicht wusste wie ichs mit der AJAX-Variante mache probierte ich was neues.
Und jetzt steh ich wieder vor Problemen. Ich bruche einen verweis mit dem die Tabelle erstellt wird und die Daten müssen in ein mehrdimensionales Arraydamit ich sie auswerten kann.
Im prinzip ist es mir egal wie ichs erstelle.
Brauche nur einen Link mit dem Die datein geladen verwerden und eine Variable, die die Datensätze enthält. Damit ich mit einer For-each-Schleife über alle Datensätze drüber gehen kann und den entsprechenden in eine neue Datei oder erst in eine Array und dann in eine Datei schreiben kann.
Tschau Jessica
PS hie ist der Link zum altem Thread: http://www.supportnet.de/threads/1532781
Antwort 3 von rfb vom 18.04.2019, 07:45 Options
Zitat:
da er mir die Datei nicht in Form einer tabelle anzeigte
ich muss zugeben, außer diesem Satz verstehe ich nur sehr viel "Bahnhof"
Mal ein Tipp
Du hast aufd er Seite etwa folgendes:
<div id="leer"></div>
dann kannst du mittels JavaScript dies füllen
var div=document.getElementById("leer");
div.innerHTML="<p>Ein neuer Absatz.</p> <p>Und gleich noch einer.</p>";
Auch eine Tabelle ließe sich so komplett einfügen,
der Browser interpretiert das HTML darin.
(Eleganter wäre natürlich die Lösung mittels document.createElement(), aber dies hat gerade bei Tabellen ein paar Tücken.)
Antwort 4 von rfb vom 18.04.2019, 08:35 Options
ansonsten:
Bitte erkläre nochmals ganz ausführlich
- wie die Daten in der TXT-Datei vorliegen
- wie sie in die HTML-Seite eingebaut werden sollen
Aus deinem Posting (übrigens auch im Ursprungsthread) geht das nicht klar hervor - und ohne klare Problembeschreibung sind alle Lösungsansätze nur ein Stochern in der trüben Brühe.
Antwort 5 von Jessica vom 18.04.2019, 08:37 Options
Hallo
Ich habe eine Textdatei, die eine Tabelle repräsentieren soll. Die Spalten sind durch Tabstopp getrennt. Wenn ich mir die Datei mit folgendem Code anzeigen lasse, existiert kein Tabstop mehr, sondern nur eine Leerzeichen. Hätte aber gerne das der Dateiinhalt tabellarisch angezeigt wird.
Eine Div-Anweisung existiert, nur wie muss ich deine Codezeilen einbinden?
[code
<html>
<head>
<title>AJAX</title>
<script type="text/javascript">
<!--
function nachladen(dateiname) {
var http = null;
if (window.XMLHttpRequest) {
http = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
http = new ActiveXObject("Microsoft.XMLHTTP");
}
if (http != null) {
http.open("GET", dateiname, true);
http.onreadystatechange = ausgeben;
http.send(null);
}
function ausgeben() {
if (http.readyState == 4) {
//document.getElementById("Ausgabe").innerHTML = http.responseText;
var dateiinhalt=http.responseText;
dateiinhalt = dateiinhalt.replace(/\n/g, '<br />');
if (dateiname == 'test.txt'){
document.getElementById("Ausgabe").innerHTML = dateiinhalt;
}
else {
document.getElementById("Ausgabe1").innerHTML = dateiinhalt;
}
}
}
}
//window.onload=nachladen;
//--></script>
<!-- <a href="javascript:nachladen('test1.txt')">test</a><br />
<a href="javascript:nachladen('mappe1.csv')">mappe1</a>-->
</head>
<body>
<p> Anzeige der Datein </p>
<a href="javascript:nachladen('test.txt')">test</a><br /><br />
<div id="Ausgabe"></div><br />
<a href="javascript:nachladen('mappe1.csv')">mappe1</a> <br /><br />
<div id="Ausgabe1"></div><br />
</body>
</html>
][/code]
Mit Auswerten meine ich, ich habe drei Datein mit Tabellen zur Realisierung eines Fertigungsprozesses. Eine für die Verarbeitung, eine für den Transport und eine für die Lagerung. Aus diesen drei Tabellen möchte ich eine neue Tabelle Fertigung erzeugen, die alle DS der anderen Tabellen enthält. Also erst ein Transportprozess dann ein Verarbeitungsprozess und soweiter. Irgendwie muss ich ja auf die Datensätzte zu greifen, nur wie? Dachte halt an ein Array, das ich dann durchlaufe.
Hoffe ich hab mich etwas besser aus gedrück und kannst jetzt damit mehr anfangen.
Jessica
Antwort 6 von renan vom 18.04.2019, 08:51 Options
an deiner stelle würd ich es im ie machen. der ist für solche lokalen/intranet- anwendungen mit sonderrechten predestiniert.
mit dem firefox wird das schreiben der ergebnisse in eine datei nicht funktionieren.
wahrscheinlich ist eine
hta für deinen zweck genau das richtige. so kannst du problemlos auf das lokale dateisystem zugreifen, ohne probleme mit den sicherheitseinstellungen des ie zu bekommen.
Antwort 7 von Jessica vom 18.04.2019, 10:15 Options
Hallo kenne mich aber nicht sehr gut aus auf dem Gebiet.
Könntest du mir dies etwas näher erklären. Am besten auf mein Problem zugeschnitten
Tschau Jessica
Antwort 8 von rfb vom 18.04.2019, 11:23 Options
also 3 ASCII Dateien?
Aufbau jeweils ungefähr:
blaTABblaTABblaRETURN
bloTABbloTABbloRETURN
...
Die einzelnen Zeilen aus den 3 ASCII-Dateien sollen jeweils in einer Tabellenzeile enthalten sein (diesen Schritt hast du bislang nur sehr wirr beschrieben!)?
Ich würde dazu die 3 Dateien nacheinander einlesen in 3 Variablen
Mittels split("\n") in ein Array packen, das jeweils eine Zeile pro Element enthält
Dann mittels replace in jedem Array-Element die TABs durch "</td><td>" also Begrenzer eines HTML-Tabellen-Elements ersetzen.
Die jeweiligen Elemente aus den 3 Arrays ebenso aneinanderhängen, davor ein "<tr>", ein "</tr>" dahinter - fertig ist wieder eine Tabellenzeile.
Vor der Ausgabe des Ganzen noch ein "<table>" und "</table>" drumherum, evtl. eine header-Zeile.
Aber wie schon gesagt: so richtig deutlich ist deine Datenstruktur und das was du daraus machen willst nicht.
Antwort 9 von Jessica vom 18.04.2019, 20:25 Options
Hallo
Ich möchte eine HTML-Dokument erstellen mit Verweisen zu einer Datei (csv oder txt). Druch Betätigung des Verweise soll die Datei im gleichen Dokument angezeigt werden.
Benötige 7 Verweise, da 7 Datein/Tabellen.
Daten werden mit Excel erfasst, daher csv (daten durch ; getrennt) odr txt (Daten durch Tabstob getrennt) möglich.
Vier Tabellen für die Stammdaten
1. Tabelle: Werkstück
Werkstueck_ID Name
1 Zylinderwelle_roh
2 Zylinderwelle_gedreht
3 Zylinderwelle_bebohrt
4 Zylinderwelle_entgratet
...
2. Tabelle: Ort
Ort_ID Name Art_id
1 Ausgangslager 1
2 HAP 2
3 BR 2
4 DFS 2
... ... ...
3. Tabelle: Fahrzeug
Fahrzeug_ID Name
1 Kran
2 Gabelstapler
3 Handhubwagen
... ...
4. Tabelle Art
Art_ID Name
1 Lager
2 Maschine
Drei Tabellen beinhalten die Prozesse für die Verarbeitung
1. Tabelle: Verarbeitung
Verarbeitungs_ID Name Ort_ID Werkstueck_ID (vorher) Werkstueck_ID (nahcher) Dauer
1 V_ZW_AG_2 4 1 2 1000
2 V_ZW_AG_3 3 2 3 500
3 V_ZW_AG_4 2 3 4 900
... ... ... ... ... ...
2. Tabelle Lagerung
Lagerung_ID Name Ort_ID Werkstueck_ID Dauer
1 L_ZW_1 2 3 30
... ... ... ... ...
3. Tabelle Transprot
Transport_ID Name Ort_ID (Start) Oert_ID (Ziel) Werkstueck_ID Fahrzeug_ID Dauer
1 T_ZW_1 1 4 1 3 10
2 T_ZW_2 4 3 2 3 15
3 T_ZW_3 3 2 3 3 30
4 T_ZW_4 2 4 3 25
Diese Tabellen möchte ich in tabellarischer Form angezeigt bekommen und durch erneutets betätigen des Verweise nach möglichkeit wirder ausblenden.
So ist aber nicht möglich zu sagen welcher Prozess wann anfangt und Endet. Daher soll der Inhalt der letzten drei Tabellen in ein Array eingelesen werden. Auf der Grundlage der Werkstück_ID und Ort_ID soll entschieden werden welcher Vorgang wann abgearbeitet werden soll.
dies soll in JavaScript nach betätigung eines Buttons erfolgen. Diese daten sollen angezeigt werden und wenn möglich in ein Array und eine Datei abgespeichert werden.
Der Aufbau dieser Datei sollte in etwa so aussehen
Prozess_ID V_ID Transport_ID Lagerungs_ID Startzeit Zielzeit
1 0 1 0 0 10
2 1 0 0 10 1010
3 0 2 0 1010 1025
4 2 0 0 1025 1525
5 0 3 0 1525 1555
6 0 0 1 1555 1585
7 3 0 0 1585 2485
8 0 4 0 2485 2510
... ... ... ... ... ...
Die spalten V_ID, Transport_ID und Lagerungs_ID können auch in einer Spalte angezeigt werden.
Auf der Grundlage dieser Tabelle ist jetzt erkenntlich, welcher Prozess zu welcher Zeit abläuft.
Hoffe jetzt wird ein wenig klarer was ich meine und ihr könnt mir Helfen
Jessica
Antwort 10 von renan vom 18.04.2019, 21:31 Options
also meines wissens geht das schreiben und lesen lokaler dateien nur mit activex. und das unterstützt nur der ie (und netscape 8 im ie-modus). das schreiben scheint ja jetzt gestorben zu sein. zum lesen kenne ich zwei möglichkeiten: entweder über das activex "scripting.filesystemobject" innerhalb eines skriptes, oder das activex, welches du zu beginn des threads schon gepostet hast. für dich ist das letztere wahrscheinlich besser zu handeln (
falls du noch infos brauchst). wie du das mit dem ein- und ausblenden machen kannst, weiss ich aber nicht. schätze rfb kann dir da weiterhelfen. ich würde da was hinpfuschen und dann würde er wahrscheinlich mit mir schimpfen. ;-)
falls der ie wegen activex ärger macht (sicherheitseinstellungen), kannst du das umgehen, indem du die dateiendung von htm(l) nach hta änderst.
frage am rande: warum machst du nicht gleich alles mit excel?
Antwort 11 von rfb vom 19.04.2019, 12:01 Options
Zitat:
Diese daten sollen ... in ... eine Datei abgespeichert werden.
dies ist nun mit reinem AJAX browserübergreifend nicht zu machen, dafür bräuchtest du eine serverseitige Unterstützung (mit dem Murks, den der IE noch so kann, kenn ich mich nicht aus)
Alles andere wäre auf dem o.g. Weg machbar, CSV-Dateien sind meist einfacher zu handlen, also wähle dies Format (es sei denn in den Daten selbst können Komma vorkommen).
Über einen Script-Ansatz-Entwurf grüble ich mal - das kann aber ein bisserl dauern, bis ich sowas lauffähig und halbwegs "unobtrusive" hinbiege.
Antwort 12 von renan vom 19.04.2019, 12:34 Options
Zitat:
Diese daten sollen ... in ... eine Datei abgespeichert werden.
ups hatte ich überlesen. schreiben ist also doch noch aktuell.
Zitat:
dafür bräuchtest du eine serverseitige Unterstützung
also ich vermute, dass es gar keinen server gibt, sondern alles lokal abläuft. hoffe ich hab da nicht wieder was überlesen. ;-)
Zitat:
mit dem Murks, den der IE noch so kann
ich bin ein ausgesprochener gegner des ie. aber seine lokalen fähigkeiten sind wirklich extrem gute features (die durch die fahrlässige bzw. zuerst gar nicht vorhandene sicherheitspolitik von ms in verruf geraten sind). ich kenne aber keine andere möglichkeit so einfach programme mit interaktiver, grafischer benutzeroberflache zu schreiben, wie das mit hta möglich ist.
Antwort 13 von mephan vom 19.04.2019, 12:46 Options
Tach
Für alle die auch über dieses Wort -unobtrusive- gestolpert sind.
"Die Art und Weise JavaScript von den anderen Ebenen zu lösen ist unter dem Namen "unobtrusive Javascript" bekannt, da "barrierefrei" (accessible) mehr bedeutet als nur sauber zu programmieren."
Quelle =
http://ichwill.net/gruß mephan ;-)
Antwort 14 von Jessica vom 19.04.2019, 16:32 Options
hallo
ein Server ist nicht vorhanden.
Soll alles Lokal auf dem rechner Laufen.
Die Daten selbst enhalten keine Kommas, Leerzeichen, Simokolon oder andere Sonderzeichen (ausser _ beim Namen).
Wenns nur mit dem ie funktioniert ist das nicht so schlimm. Wäre halt besser wenns bei anderen auch funzt. Aber hauptsache es geht mit einem Browser.
Tschau Jessica
und tausend dank für eure wirklich schnelle und gute Hilfe in diesem Forum
Antwort 15 von renan vom 19.04.2019, 22:54 Options
ich hab dir mal eine demo hochgeladen, wie das lesen und schreiben lokaler dateien funktioniert:
http://www.file-upload.net/download-253235/1.hta.html
die interessanten funktionen sind:
file2array() - liest eine txt- oder csv-datei ein und gibt einen array mit ihrem inhalt zurück
array2file() - schreibt den inhalt eines arrays in eine txt- oder csv-datei
hoffe du benutzt den ie5 nicht mehr, denn darin hab ich die hta nicht zum laufen gebracht. trotz angabe von navigable="yes" öffnet er alle links in einem neuen fenster. vielleicht kann mir jemand sagen, ob ich da was falsch mache?
beim zweiten teil der aufgabe schnalle ich nicht wirklich nach welchen kriterien die 3 tabellen zu einer verknüpft werden sollen.
achja, falls du den quelltext der hta suchen solltest, einfach mit dem editor von windows die datei öffnen oder im ie kontextmenü/quelltext anzeigen wählen. ;-)
Antwort 16 von rfb vom 20.04.2019, 10:26 Options
@jessica:
sollte renans Code deinen Zweck nicht erfüllen melde dich, ansonsten lass ich meine grauen Zellen erst einmal ruhen ;-)
Antwort 17 von Jessica vom 21.04.2019, 13:11 Options
Hallo
@renan
den ie5 benutz ich glaub ich nicht, funktioniert jedenfalls bei mir
hauptsächlich nutz ich den morzilla firefox
Man kann erst eine Verarbeitung, Transport oder Lagerung beginnen, wenn das entsprechende Werkstück bereits hergestellt wurde. Dies erkannt man an der Spalte Werkstuck_ID (nach) der tabelle Verarbeitung. Also muss diese Spalte mit den Spalten Werkstück_ID(vor) der Tabelle Verarbeitung, der Spalte Werkstueck_ID der Tabellen Lagerung und Transport verglichen werden. möchte ich z.B. das Werkstück 3 transportieren, muss die Verarbeitung mit der ID 3 in der Splate Werkstück_ID (nach) als Vorgänger für den Transport fungieren. Verarbeitungsschritte und Transportschritte wechseln sich immer ab. Lagerungsschritte kommen nur selten vor. Zum beispiel wenn bei einem Verarbeitungsschritt zwei Teile zu einem zusammengeschweißt werden oder wenn die Maschine besetz ist. Wenn zwei Teile zusammen geschweißt werden kann die Verarbeitung erst beginnen wenn beide teile fertig sind, also benötige ich eine Lagerung die das erste fertige teil solange lagert, bis das andere fertigt ist. Dies erkenne ich daran das die ID in der Spalte Werkstueck_ID (nach) zweimal vorkommt
Transprote haben nur Verarbeitungen als Vorgänger
Verarbeitung hat Transporte und Lagerung als Vorgänger
Lagerung hat Transport als Vorgänger zur Berechnung der Stat und Zielzeit zur Überprüfung aber eine Verarbeitung
@rfb
renans Code funktioniert auf den ersten Blick erstmal recht gut. Muss aber erstmal abklären ob das als hta-Datei erlaubt ist.
Wenn du lust hast, kannst dich ja mal weiter gedanken machen, würde mich schon mal interessieren. Die Lösung mit AJAX fand ich auch recht gut.
Melde mich wenns was neues gibt
Tschau Jesscia
Antwort 18 von Jessica vom 23.04.2019, 12:21 Options
Hallo Leute
Habe heute das wegen der hta-Datei mit meinem Partner abgeklärt.
Er würde die AJAX-Variante bevorzugen, da die Simulation der Prozesse mittels VRML in das HTML-Dokument eingebunden werden soll.
Funktioniert auch bereits, er weiß nur nicht wie in der hta-Datei geht bzw. obs möglich ist. Darum würde ich meinen Teil der Projektarbeit (bereits in den voherig beschiebenen Antworten) mit Ajax realisieren wollen.
Wäre nett wenn mir jemand Helefen könnte.
@renan deine Version ist wirklich gut, auch einfach zu verstehen
aber ich glaub AJAX ist besser geeignet, da so die kommunikation mit VRML einfacher ist
@rfb
Wäre echt nett wenn du mir Helfen könntest, da du anscheinet viel Ahnung von der Thematik hast
Tschau Jessica
PS ich bin über jede hilfe dankbar
Antwort 19 von renan vom 24.04.2019, 10:25 Options
Zitat:
er weiß nur nicht wie in der hta-Datei geht bzw. obs möglich ist.
um das herauszufinden müsste man das entsprechende html-dokument mit der dateiendung ".hta" versehen und danach doppelklicken, um zu schauen was passiert. dazu muss lediglich vorher, in den einstellungen des explorers, der haken bei
"Erweiterungen bei bekannten Dateitypen ausblenden" entfernt werden, sonst verhindert windows das ändern der dateiendung.
ansonsten kann man auch aus der hta, durch umbenennung, ein normales html-dokument machen (den hta:application-tag auskommentieren, oder entfernen). theoretisch müsste der ie dann die gleiche funktionalität bereitstellen. in der praxis würde ich aber erwarten, dass dafür die activex-sicherheitseinstellungen heruntergesetzt werden müssen. dabei ist darauf zu achten, dass dafür
nicht die einstellungen der "internetzone" zuständig sind, sondern die für die arbeitsplatzzone. unter extras/internetoptionen/sicherheit wird diese zone aber erst zum verändern bereitgestellt, wenn man vorher in der registry im schlüssel "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones 0" den wert "Flags" auf 1 gesetzt hat.
Zitat:
Er würde die AJAX-Variante bevorzugen
wie bereits oben erwähnt ist es meines wissens nicht möglich mit ajax auf lokale dateien zuzugreifen. man bräuchte dafür einen lokalen, programmierbaren (zb. mit php) webserver. dann würde man aber konsequenterweise die dateizugriffe gleich der serverapplikation überlassen.
Antwort 20 von rfb vom 24.04.2019, 11:20 Options
Zitat:
wie bereits oben erwähnt ist es meines wissens nicht möglich mit ajax auf lokale dateien zuzugreifen
wie schon erwähnt: doch ist möglich, aber nur lesend!