text in element übertragen
torsten
- javascript
moin!
ich würde mir die haare raufen wenn ich könnte!
bisher habe ich ein <div id="hintergrund"> mit textlinks auf folgende art und weise gefüllt:
im body->
<div id="hintergrund">
<script type="text/javascript">
writeLinks();
</script>
</div>
in separater *.js datei->
function writeLinks() {
document.write("<p>" + links + "</p>");
}
was auch prima funktioniert(e), falls die frage nach dem wieso auftaucht kann ich auch schon mit einer antwort dienen
ich versuche jetzt ein js schnipselchen zusammen zu basteln, das die notation im body obsolet macht, quasi das div mittels getElementById("hintergrund")
erkennt und dort den text einbastelt, daraus werden neue problemchen entstehen, weil das element berits einen inhalt hat, der dann mglw überschrieben wird, was aber relativ gut lösbar ist in dem ich mein html und css etwas anpasse.
function writeLinks() {
document.getElementById("hintergrund").document.write("<p>" + links + "</p>");
}
geht schon mal nicht, was die fehlerkonsole ausspuckt versteh ich auch nicht recht (FB / document undefined -> ich soll also in einer variablen definieren welches document... ?) das auslösen eines windows.onload bewerkstellige ich mit hilfe einer addEvent funktion was auch bereits prima funktioniert.
mit folgendem schnipsel wird der inhalt der variablen "links" übertragen, aber die gesamte seite wird dabei überschrieben, also hab ich dem ding noch nicht gesagt wohin das ganze soll...
function writeLinks() {
var getId = document.getElementById("hintergrund");
document.write("<p>" + links + "</p>");
}
wie geht das? was fehlt? ich wurschtel nur rum und hab den durchblick, den ich noch nicht habe schon mal verloren.
Hallo,
document.getElementById("hintergrund").document.write("<p>" + links + "</p>");
Das ist Phantasiesyntax. getElementById gibt dir ein Elementknoten zurück. Dieser hat keine document-Eigenschaft. Was du brauchst ist eher http://de.selfhtml.org/javascript/objekte/all.htm#inner_html@title=innerHTML. Oder, wenn du dem bestehenden Inhalt etwas anhängen willst: element.insertAdjacentHTML('beforeEnd', '…');
geht schon mal nicht, was die fehlerkonsole ausspuckt versteh ich auch nicht recht (FB / document undefined -> ich soll also in einer variablen definieren welches document... ?)
Also wenn ich den Code im Firefox ausführe in einem Dokument, in dem es ein Element mit der ID hintergrund gibt, so bekomme ich den Fehler:
TypeError: document.getElementById("hintergrund").document is undefined
document.getElementById("home").document.write("<p>" + links + "</p>")
Das bedeutet, dass das Objekt, das document.getElementById("hintergrund") zurückgibt, keine document-Eigenschaft hat.
Mathias
moin mathias!
Das ist Phantasiesyntax.
ja, leider...
getElementById gibt dir ein Elementknoten zurück. Dieser hat keine document-Eigenschaft.
aufgabe: erklärung für elementknoten suchen...
-> erledigt ;-)
Was du brauchst ist eher http://de.selfhtml.org/javascript/objekte/all.htm#inner_html@title=innerHTML. Oder, wenn du dem bestehenden Inhalt etwas anhängen willst:
element.insertAdjacentHTML('beforeEnd', '…');
der versuch mit der ersten variante sieht folgender maßen aus und funktioniert oooch ned:
var linkList = "bla bla bla";
function writeLinks() {
document.all.hintergrund.innerHTML = linkList;
}
addEvent(window,"onload",writeLinks);
ob die zweite variante, das ist was ich benötige kann ich nicht entscheiden... in dem <div> existieren zwei mittels css fixierte img-links außerdem soll das innerHTML nicht oder mit zeitverzögerung onload ausgeführt werden hab ich gelesen... das wär dann ein weiteres problem, aber vielleicht reicht ja schon das addEvent um die gewünschte verzögerung zu erzeugen, da writeLinks als "letztes" onload ereignis ausgeführt wird.
?
Hallo,
getElementById gibt dir ein Elementknoten zurück. Dieser hat keine document-Eigenschaft.
Siehe auch HTML-Elementobjekte:
http://de.selfhtml.org/javascript/objekte/htmlelemente.htm
document.all.hintergrund.innerHTML = linkList;
Auch wenn es so in SELFHTML steht, innerHTML ist einfach eine Eigenschaft von Elementobjekten, die von sämtlichen Browsern unterstützt wird. Sie ist nicht daran gekoppelt, dass man sich das Elementobjekt über document.all holt. document.all ist veraltet, du kannst ruhig bei document.getElementById bleiben.
document.getElementById('hintergrund').innerHTML = linkList;
addEvent(window,"onload",writeLinks);
Wie sieht deine addEvent-Funktion aus?
ob die zweite variante, das ist was ich benötige kann ich nicht entscheiden...
Entweder das Element hat schon Inhalt und du willst welchen am Ende hinzufügen,
oder das Element ist leer und du willst den Inhalt komplett überschreiben.
Wenn du einfach innerHTML = '…' notierst, so wird der Inhalt komplett überschrieben.
in dem <div> existieren zwei mittels css fixierte img-links
Dann suchst du wohl eher
document.getElementById('hintergrund').insertAdjacentHTML('beforeEnd', linkList);
oder alternativ (was aber nicht so sauber ist):
document.getElementById('hintergrund').innerHTML += linkList;
außerdem soll das innerHTML nicht oder mit zeitverzögerung onload ausgeführt werden hab ich gelesen...
Bei der JS-Programierung muss man generell dafür sorgen, dass zum Zeitpunkt, wo ein Script ausgeführt wird und auf gewisse Elemente im DOM zugegriffen wird, das Dokument schon bis dahin geparst wurde. Das kann man z.B. dadurch garantieren, dass man das Script beim load-Ereignis startet.
das wär dann ein weiteres problem, aber vielleicht reicht ja schon das addEvent um die gewünschte verzögerung zu erzeugen, da writeLinks als "letztes" onload ereignis ausgeführt wird.
Ob der Handler als erster oder letzter ausgeführt wird, dürfte für das Einfügen der Inhalt keinen Unterschied machen, es sei denn, der Handler baut auf den DOM-Änderungen vorheriger Handler auf.
Mathias
moin!
danke erst mal :)
document.getElementById('hintergrund').innerHTML = linkList;
das funktioniert bei mir prima, überschreibt aber, wie du schon sagtest den vorhandenen inhalt. (ich kann das problemchen aber mittels css und eines <p id="">
lösen)
document.getElementById('hintergrund').innerHTML += linkList;
hier kann ich keinen unterschied zur vorangegangenen funktion feststellen... was soll das "+" bewirken?
Dann suchst du wohl eher
document.getElementById('hintergrund').insertAdjacentHTML('beforeEnd', linkList);
das funktioniert nicht, die fehlerkonsole meint: "is not a function" (?)
Bei der JS-Programierung muss man generell dafür sorgen, dass zum Zeitpunkt, wo ein Script ausgeführt wird und auf gewisse Elemente im DOM zugegriffen wird, das Dokument schon bis dahin geparst wurde. Das kann man z.B. dadurch garantieren, dass man das Script beim load-Ereignis startet.
hab mal folgendes notiert: window.setTimeout("writeLinks()", 3000);
sieht lustig aus...
Ob der Handler als erster oder letzter ausgeführt wird, dürfte für das Einfügen der Inhalt keinen Unterschied machen, es sei denn, der Handler baut auf den DOM-Änderungen vorheriger Handler auf.
du willst sagen es ist egal ob das .innerHTML onload ausgeführt wird oder nicht, gell?
addEvent(window,"onload",writeLinks);
Wie sieht deine addEvent-Funktion aus?
im moment so:
function addEvent(obj, type, fn) {
if(type.search("on")==0) type = type.substr(2);
if (obj.addEventListener) {
obj.addEventListener(type, fn, false);
}
else if (obj.attachEvent) {
obj.attachEvent('on' + type, function () {
return fn.call(obj, window.event);
});
}
}
document.getElementById('hintergrund').innerHTML += linkList;
hier kann ich keinen unterschied zur vorangegangenen funktion feststellen...
Was bedeutet das? Überschreibt es den Inhalt?
was soll das "+" bewirken?
el.innerHTML += 'foo';
ist eine Kurzschreibweise für
el.innerHTML = el.innerHTML + 'foo';
(Auslesen, String anhängen, wieder Zuweisen)
document.getElementById('hintergrund').insertAdjacentHTML('beforeEnd', linkList);
das funktioniert nicht, die fehlerkonsole meint: "is not a function" (?)
Oops, Firefox kennt die Methode tatsächlich noch nicht.
Ob der Handler als erster oder letzter ausgeführt wird, dürfte für das Einfügen der Inhalt keinen Unterschied machen, es sei denn, der Handler baut auf den DOM-Änderungen vorheriger Handler auf.
du willst sagen es ist egal ob das .innerHTML onload ausgeführt wird oder nicht, gell?
Nein, das wollte ich nicht sagen.
Es ist egal, ob du
addEvent(window, "onload", irgendeineAndereFunktion);
addEvent(window, "onload", writeLinks);
oder
addEvent(window, "onload", writeLinks);
addEvent(window, "onload", irgendeineAndereFunktion);
notierst – unter der Voraussetzung, dass »irgendeineAndereFunktion« nichts tut, was »writeLinks« an seiner Arbeit hindert.
Mathias
document.getElementById('hintergrund').insertAdjacentHTML('beforeEnd', linkList);
das funktioniert nicht, die fehlerkonsole meint: "is not a function" (?)
Oops, Firefox kennt die Methode tatsächlich noch nicht.
Ja, erst ab Version 8.
moin!
document.getElementById('hintergrund').innerHTML += linkList;
hier kann ich keinen unterschied zur vorangegangenen funktion feststellen...
Was bedeutet das? Überschreibt es den Inhalt?
was soll das "+" bewirken?
el.innerHTML += 'foo';
ist eine Kurzschreibweise für
el.innerHTML = el.innerHTML + 'foo';
(Auslesen, String anhängen, wieder Zuweisen)
hm, glaube zu verstehen... ist in meinem fall aber nicht nötig vermute ich mal, da es ja eigentlich nix zu übergeben gibt (?)
Ob der Handler als erster oder letzter ausgeführt wird, dürfte für das Einfügen der Inhalt keinen Unterschied machen, es sei denn, der Handler baut auf den DOM-Änderungen vorheriger Handler auf.
du willst sagen es ist egal ob das .innerHTML onload ausgeführt wird oder nicht, gell?
Nein, das wollte ich nicht sagen.
Es ist egal, ob du
addEvent(window, "onload", irgendeineAndereFunktion);
addEvent(window, "onload", writeLinks);oder
addEvent(window, "onload", writeLinks);
addEvent(window, "onload", irgendeineAndereFunktion);
bisher bin ich davon ausgegangen, dass das addEvent nichts anderes als windows.onload ersetzt und damit verhindert, dass sich die ereignisse nicht gegenseitig überschreiben. in diesem zusammenhang hab auch immer noch nicht begriffen ob das wirklich relevanz hat was in http://de.selfhtml.org/javascript/objekte/all.htm#inner_html@title=selfhtml beschrieben steht, nämlch: "Die Eigenschaft innerHTML sollten Sie nicht direkt beim Einlesen der HTML-Datei anwenden, sondern immer erst abhängig von Aktionen wie Verweisklicks oder Button-Klicks oder mit einem Seite setTimeout() von einigen Sekunden davor. Bei Anwendung direkt beim Einlesen der Datei meldet der Internet Explorer 4.0 einen Laufzeitfehler."
ist der IE4 der einzige grund? hat noch irgendjemand so ein ding?
notierst – unter der Voraussetzung, dass »irgendeineAndereFunktion« nichts tut, was »writeLinks« an seiner Arbeit hindert.
Mathias
moin!
Es ist egal, ob du
addEvent(window, "onload", irgendeineAndereFunktion);
addEvent(window, "onload", writeLinks);oder
addEvent(window, "onload", writeLinks);
addEvent(window, "onload", irgendeineAndereFunktion);
ui, außerdem hab ich gerade entweder einen fetten fehler oder das obige ist nicht egal, verschiebe ich die funktion an den anfang des js ist alles gut, verschiebe ich sie ans ende ist es das nicht! ich kann nicht behaupten es läge nicht an einem fremden script ist aber trotz allem interessant.
steht das script hinter dem shadowbox.setup werden alle links übertragen und dargestellt wie gewünscht aber die sh-box läd nicht, steht das script zuvor ist alles bestens...
[?]