Erzeugte DIVs in ein Cookie speichern

Hallo Liebe/-r Experte/-in,

ich stehe vor einem Problem, deshalb bitte ich um Eure Mithilfe.

Ich erzeuge mit folgendem Javascript mehrere DIV-Container:

function createLayer() {
var Text = document.createTextNode(‚mein Inhalt‘);
var Text2 = document.createTextNode(‚mein Inhalt 2‘);
var divUnten = document.createElement(‚DIV‘);
var divOben = document.createElement(‚DIV‘);

divUnten.appendChild(Text);
divUnten.className = ‚widget-head‘;
divOben.appendChild(Text2);
divOben.className = ‚widget-content‘;

var li = document.createElement(‚li‘);
li.appendChild(divUnten);
li.appendChild(divOben);
li.className = ‚widget color-white‘;
li.id = ‚widget56‘;
document.getElementById(‚column1‘).appendChild(li);

Soweit funktioniert alles.

Nun möchte ich, dass die erzeugten DIVs nach einem Reload der Seite weiterhin erhalten bleiben. Ich möchte die Daten in ein Cookie schreiben.

Mein Ansatz sieht so aus:

function rewriteCookie () {
var cookiecache = ‚linkliste=‘;
for (var ci = 1; ci

grüße!

hast du ein absolut vollständigeres beispiel für mich?

denn ich sehe nicht wann und wie du das cookie schreibst.

grüße
matze

Hallo,

hast du geprüft, ob der/dein Browser Cookies überhaupt speichert? Meiner (Defaulteinstellung) vergisst Cookies beim Beenden des Programms.

Hast du dir den Inhalt des Cookies schon mal mit alert angesehen?

Gruß,

Jürgen

Hi Matze,

hier ist mal der ganze Code. Auf die CSS habe ich mal verzichtet, da sie extra veknüpft sind.

// neues Div erzeugen
var linkliste = new Array();

function createLayer() {
var Text = document.createTextNode(‚mein Inhalt‘);
var Text2 = document.createTextNode(‚mein Inhalt 2‘);
var divUnten = document.createElement(‚DIV‘);
var divOben = document.createElement(‚DIV‘);

divUnten.appendChild(Text);
divUnten.className = ‚widget-head‘;
divOben.appendChild(Text2);
divOben.className = ‚widget-content‘;

var li = document.createElement(‚li‘);
li.appendChild(divUnten);
li.appendChild(divOben);
li.className = ‚widget color-white‘;
li.id = ‚widget56‘;

document.getElementById(‚column1‘).appendChild(li);
}

function rewriteCookie () {
var cookiecache = ‚linkliste=‘;
for (var ci = 1; ci < linkliste.length; ci++) {
if (linkliste[ci][‚widget56‘] != ‚‘) {
cookiecache += ‚[widget56‘ + linkliste[ci][‚widget56‘];
cookiecache += ‚]‘;
}
}
var ablauf = new Date();
var inzweitausendTagen = ablauf.getTime() + (2000 * 24 * 60 * 60 * 1000);
ablauf.setTime(inzweitausendTagen);

document.cookie = cookiecache + „; expires=“ + ablauf.toGMTString();

}
function loadCookieVal () {
linkcontainer = document.getElementById(‚column1‘);
var parseme = document.cookie;
var pobjekte = parseme.split("[widget56");
for (var ci = 1; ci < pobjekte.length; ci++) {

}
}

Test

Klick mich!

Danke schonmal für deine Hilfe.

Viele Grüße
Marcel

Hallo Marcel,

meine erste Idee wäre, dass die Variable Linkliste in der Funktion rewriteCookie() nicht vorhanden ist. Vielleicht musst du die der Funktion übergeben? Oder das irgendwo anders definieren, was in der Linkliste alles drin sein soll…

Gruß, Björn

Hallo Liebe/-r Experte/-in,

ich stehe vor einem Problem, deshalb bitte ich um Eure
Mithilfe.

Ich erzeuge mit folgendem Javascript mehrere DIV-Container::
function createLayer() {
var Text = document.createTextNode(‚mein Inhalt‘);
var Text2 = document.createTextNode(‚mein Inhalt 2‘);
var divUnten = document.createElement(‚DIV‘);
var divOben = document.createElement(‚DIV‘);

divUnten.appendChild(Text);
divUnten.className = ‚widget-head‘;
divOben.appendChild(Text2);
divOben.className = ‚widget-content‘;

var li = document.createElement(‚li‘);
li.appendChild(divUnten);
li.appendChild(divOben);
li.className = ‚widget color-white‘;
li.id = ‚widget56‘;
document.getElementById(‚column1‘).appendChild(li);

Soweit funktioniert alles.

Nun möchte ich, dass die erzeugten DIVs nach einem Reload der
Seite weiterhin erhalten bleiben. Ich möchte die Daten in ein
Cookie schreiben.

Mein Ansatz sieht so aus:

function rewriteCookie () {
var cookiecache = ‚linkliste=‘;
for (var ci = 1; ci

hi marcel!

ich bin zur zeit auf arbeit und komme erst heute abend dazu mir den code näher anzuschauen, ich hoffe das ist ok für dich.
bekommen wir schon hin :smile:

grüße
matze

Hi Matze,

kein Thema, mach dir keinen Stress, bin ja froh, wenn du mir hilfst.

Viele Grüße
Marcel

hi!

wie wäre es so?
der inhalt ist doch relativ „statisch“

das problem ist den container selbst zu speichern gestaltet sich als schwer. darum würde ich nur den relavanten inhalt speihern. in diesem konkreten beispiel, die ahnzahl an klicks.
was durchaus denkbar ist, wenn der inhalt dynamisch ist einfach den eingegebenen inhalt mit wegspeichern, deiner create funktion übergeben und das wars :smile:.

grüße
matze

var count = 0;//anzahl klicks
var isloaded = false; //nicht weglassen, verhindert das permanente hochzählen beim start

function createLayer()
{
var Text = document.createTextNode(‚mein Inhalt‘);
var Text2 = document.createTextNode(‚mein Inhalt 2‘);
var divUnten = document.createElement(‚DIV‘);
var divOben = document.createElement(‚DIV‘);

divUnten.appendChild(Text);
divUnten.className = ‚widget-head‘;
divOben.appendChild(Text2);
divOben.className = ‚widget-content‘;

var li = document.createElement(‚li‘);
li.appendChild(divUnten);
li.appendChild(divOben);
li.className = ‚widget color-white‘;
li.id = ‚widget56‘;

document.getElementById(‚column1‘).appendChild(li);

//gültiger wert?!
if(isNaN(count)){
count = 0;
}

//wenn geladen, fange erst an zu zählen
if(isloaded)
count ++;

//schreibe das cookie neu mit jedem klick
rewriteCookie();
}

function rewriteCookie ()
{
//index der zu lesen ist
var cookiecache = ‚linkliste=‘;

//inhalt des cookies
cookiecache += ‚[‘ + count + „]“;

var ablauf = new Date();
var inzweitausendTagen = ablauf.getTime() + (2000 * 24 * 60 * 60 * 1000);
ablauf.setTime(inzweitausendTagen);

document.cookie = cookiecache + "; " + „expires=“ + ablauf.toGMTString();
}

function loadCookieVal () {

var parseme = document.cookie;
var cookiecache = ‚linkliste=‘;

//exisiterit das cookie?
if (document.cookie)
{
var Wertstart = document.cookie.indexOf("=") + 1;
var Wertende = document.cookie.indexOf(";");

if (Wertende==-1) Wertende=document.cookie.length;

//extrahiere den zähler
count = unescape(document.cookie.substring(Wertstart+1,Wertende-1));

//schreibe die anzhal an menüpunkten in die seite
for(var i=0; i< parseInt(count); i++)
{
createLayer();
}
}

isloaded = true;
}

Test

Klick mich!

ahso übrigens :smile:
wie in jeder guten programmiersprache :smiley: fängt ein array bei 0 an! nicht bei 1!!! das ist kein VB :smile:
die length ist wiederum die komplettlänge. also wäre das array „Hi“ [0] = H und [1] = i mit einer length von 2. somit kannst du:

var meineVariable = „Hi“;

for(var i = 0; i

Hallo Marcel,

Ich habe den Code für die Cookies aus dem Internet. Ich habe
versucht, ihn an meine Bedürfnisse anzupassen. Leider werden
die Daten nicht in ein Cookie gespeichert und ich weiß nicht,
warum es nicht funktioniert.

einen direkten Fehler kann ich nicht finden, aber in manchen Browsern z.B. Firefox gibt es die Möglichkeit, dass man sich auftretende JavaScriptfehler anzeigen lässt. Dies kann man durch Addonns erreichen wie der WebDeveloper-Leiste (Webdeveloper Toolbar). Auch bei Opera und im Internet Explorer gibt es diese Funktion.

Vielleicht solltest du dir auch einfach einen anderen Code suchen :smiley: Wie gesagt, mir ist er ein bisschen zu undurchsichtig.

MfG, Florian J.

Hi Matze,

wow. Besten Dank für das super Script, es funktioniert super.
Ich hätte da noch eine Frage :smile:

Meine Grundidee war folgendermaßen: Ich habe auf meiner Seite etwa 6 DIV Container, die ich mit der Maus bewegen kann und im Anschluss wird die neue Position jedesmal in ein Cokkies geschrieben. Jetzt wollte ich zusätzlich, durch Klick, neue Container hinzufügen, was auch super funktioniert, dank dir. Jetzt aber das Problem. Die ursprünglichen Container benötigen ein Script, zur Bewegung und Speicherung, welches erst am Ende der Seite geladen wird. Leider wird der Funktionsaufruf des Javascriptes, das für die Bewegung der Container verantwortlich ist, nicht auf die neuen erstellten Container übertragen. Somit kann ich sie aber nicht bewegen. Ich wusste nicht, dass es so kompliziert erscheint.

Weißt du, ob es irgend eine Möglichkeit gibt, dass man bspw. das fehlende Javascript in die Funktion „CreateLayer“ mit einbinden kann, so dass ich die neuen Container auch bewegen kann? Das wäre echt Spitze, wenn das gehen würde. Falls nicht, dann ist es auch nicht schlimm.

Noch Mal besten Dank für deine Hilfsbereitschaft.

Viele Grüße und noch nen schönen Abend
Marcel

Hallo Jürgen,

besten Dank für deine Hilfe. Der Tipp mit Alert war super. Konnte das Problem lösen.

Viele Grüße
Marcel

Hey nochmal,

zu deiner Frage was ich so Programmiere. Nun ja :smile:
eigentlich nur so ein bisschen Javascript, wobei ich noch absoluter Anfänger bin, was man ja gesehen hat :smiley:

Ich lerne aber gern dazu, auch wenn es nicht ganz einfach ist.

Viele Grüße
Marcel

grüße!

kein problem, habe ich gerne gemacht! und weiter gehts :smiley:
also grundsätzlich - geht nicht, gibts in der informatik nicht :smiley: alles eine frage des preises hahaha :smile:

wenn du wieder vollständigen code hast kann ich da gerne reinschaun - falls es nicht geheim ist (mit bewegen, etc.) :wink:

evtl. hilft es dir den container direkt anzusprechen.
bei bodyload das containerelement sagen - ey, das machen.

was ich dir empfehlen kann wäre java als programmiersprache für die basic skills (wo fängt ein array an, etc. - macht auch ein höllen spaß). jeder hat klein angefangen!

was machst du denn beruflich? falls du icq nutzt können wir auch gerne darüber uns zusätzlich unterhalten.

grüße
matze

Hi Matze,

danke für deine Hilfe. Ich bin gerade im Prüfungsstress und schreibe morgen eine Klausur. Ich melde mich dann morgen nochmal.

Viele Grüße und nen schönen Abend
Marcel

hi,

kein problem - viel erfolg :smile:

grüße

Hi Matze,

also, Prüfung habe ich endlich hinter mir :smile:

Erstmal Danke für das Angebot. Ja ich habe ICQ. Hier ist mal meine Nummer 264003802.

Zu meinem Beruf, ich studiere Maschinenbau und vor dem Studium habe ich als Dachdecker gearbeitet, passt eigentlich auch gar nicht wirklich zusammen :smile:

Java? Ist das denn ähnlich aufgebaut wie Javascript? Wenn es einfach zu lernen ist, bin ich dabei :smiley:

Zu meinem kleinen (großen) Problem. Könnte ich dir mal die ganzen Dateien in einer ZIP über ICQ schicken? Oder reichen dir die einzelnen Javascripts zu?

Dann nochmal Danke für deine Hilfe.

Viele Grüße
Marcel

hi marcel!

also ich habe dich meinem icq hinzugefügt.
so also java geht in die richtung von javascript ist trotz allem anders. es lässt sich sehr leicht lernen.

schick mir die scripte per icq. dann bekommen wir das hin :smile: ich habe lieber alles, da sieht man mehr :wink:

die lösung posten wir hier für andere, falls noch jemand das problem hat.

maschinenbau, hehe, auch nicht schlecht!
ich bin unstudiert, allerdings überlege ich ob ich noch informatik studieren sollte. schaden kann es nicht :smile:
hoffe die prüfung ist gut verlaufen.

also, man hört voneinander!

grüße
matze

Hey Matze,

ich hab dir mal ein Hallo über ICQ geschickt. Danke für die Info für Java. Ich werde es mir mal auf alle Fälle anschauen.

Find ich super, dass mit der Lösung posten.

Informatik studieren? Du bringst doch schon alles :smile: Klingt aber jedenfalls gut. Ich wollte ursprünglich auch Informatik studieren, da ich aber eine Absage für Informatik und eine Zusage für Maschinenbau bekommen habe, habe ich mich dann für das Letztere entschieden.

Wenn bist du denn in der Regel über ICQ erreichbar?

Dann noch nen schönen Abend und viele Grüße
Marcel

Vermutilch sind Deine Cookies zu groß, sonst kann ich in Deinem Skript keinen Fehler entdecken.

Spätestens bei 4KB ist Schluss. (Nebenbei: mehr als 20 Cookies pro Domain sind i.A. auch nicht drin.)