Javascript Seitenübergreifend?

1 Antwort

Du kannst die Information, ob der Container angezeigt werden soll, im Web Storage oder einem Cookie zwischenspeichern. Auf der Zielseite liest du die zwischengespeicherten Daten wieder aus und entscheidest auf dieser Grundlage, ob die Boxen eingeblendet werden sollen oder nicht.

lolomatrix617 
Fragesteller
 30.04.2023, 14:43

hast du eventuell einen Beispielcode, da ich in Javascript noch neu bin?

0
lolomatrix617 
Fragesteller
 30.04.2023, 14:46
@lolomatrix617

Die Daten einspeichern wäre ja ungefähr so:

function WortHinzufügen() {

  Wortspeicher[germanText.value] = englishText.value;

  germanText.value = '';

  englishText.value = '';

  localStorage.setItem('Wortspeicher', JSON.stringify(Wortspeicher));

  render();

}

Das wäre ja ein Wort einspeichern, aber wie wende ich das an?

0
regex9  30.04.2023, 14:49
@lolomatrix617

Die blau markierten Wörter in meiner Antwort sind Links zu Seiten, die beide Techniken einfach und vollständig erklären.

1
lolomatrix617 
Fragesteller
 30.04.2023, 17:37

Also in der Seite wo sich die Texte befinden steht jetzt:

    function bookmark1() {

    localStorage.setItem("bookmark1", document.getElementById("b1").value = "none");

    }

Also der Knopf, der ein Lesezeichen aktivieren soll, übt die Funktion bookmark1 aus.

In der Seite wo diese Lesezeichen dann automatisch erscheinen sollen, steht:

    function setDisplay() {

    const currentDisplay = localStorage.getItem("bockmark1");

    document.getElementById("b1").value = currentDisplay;

    b1.style.display = currentDisplay;

    }

bookmark1 wird mit der value none im LocalStorage gespeichert, jedoch wird noch nichts ausgelesen. Was mache ich falsch?

b1 ist derzeit immer auf "display: none;", jedoch soll es automatisch auf "display: flex" gesetzt werden, wenn dieser Eintrag im Storage erscheint

0
regex9  30.04.2023, 18:47
@lolomatrix617

Wieso du das value-Property von #b1 setzt, erschließt sich mir nicht. Speichere doch einfach nur die Referenzen auf die Texte.

Jeder Button bekommt also ein Attribut, in dem eine ID für die Box von Seite B steht. Bei Klick wird der Local Storage, sofern notwendig, aktualisiert.

<!-- ... -->
<button type="button" value="text-a">Save text A</button>
<button type="button" value="text-b">Save text B</button>
<script>
 const buttons = document.querySelectorAll("button[value^='text-']");

 for (const button of buttons) {
    button.addEventListener("click", evt => {
      const storedBookmarks = localStorage.getItem("bookmark");
      const ids = storedBookmarks ? new Set(storedBookmarks.split(",")) : new Set();

      if (ids.has(button.value) {
        return;
      }

      ids.add(button.value);
      localStorage.setItem("bookmark", Array.from(ids).join(","));
    });
  }
</script>

Wenn der Nutzer nun die zweite Seite lädt, wird der Local Storage wieder ausgelesen. Da die Referenzen kommasepariert in einem String stehen, brauchst du ein Split anhand diesen Trennzeichens. Über die einzelnen Einträge des entstandenen Arrays iterierst du, je Eintrag wird das passende Element im DOM gesucht und dessen Sichtbarkeit geändert.

const ids = // read ids from storage ...

for (const id of ids) {
  const element = document.getElementById(id);

  if (element) {
    element.classList.add("visible");
  }
}

Statt über das style-Property das Aussehen zu ändern, würde ich dem Element eher einen CSS-Klassenselektor zuordnen.

.visibe { display: flex }
0