Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

HTMLSlotElement: Methode assign()

Baseline
Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit März 2023 browserübergreifend verfügbar.

Die Methode assign() des Interfaces HTMLSlotElement setzt die manuell zugewiesenen Knoten des Slots auf eine geordnete Menge von slotfähigen Elementen. Die Menge der manuell zugewiesenen Knoten ist zunächst leer, bis Knoten mit assign() zugewiesen werden.

Hinweis: Manuelle Zuweisungen bestimmen den angezeigten Inhalt des Slots nur, wenn der Schattenbaum mit der Option slotAssignment: "manual" erstellt wurde. In einem Schattenbaum mit benannter (automatischer) Zuweisung aktualisiert der Aufruf von assign() weiterhin die manuell zugewiesenen Knoten des Slots, überschreibt jedoch nicht die benannte Zuweisung.

Syntax

js
assign()
assign(node1)
assign(node1, node2)
assign(node1, node2, /* …, */ nodeN)

Parameter

node1, …, nodeN

Eine Menge von Element- oder Text-Knoten. Die Übergabe von null Argumenten leert die manuell zugewiesenen Knoten des Slots, und sein Fallback-Inhalt wird angezeigt. Fallback-Inhalt wird auch angezeigt, wenn keine Knoten zugewiesen wurden oder alle zugewiesenen Knoten aus dem Schatten-Host entfernt wurden.

Das Entfernen eines Knotens aus dem Schatten-Host erhält seine manuelle Zuweisung, sodass das erneute Einfügen in den Host seine Slot-Zuweisung wiederherstellt, sofern die manuelle Zuweisung nicht mit assign() geändert wurde.

Rückgabewert

Keiner (undefined).

Beispiele

Zugewiesene Knoten und Fallback-Inhalt anzeigen

In diesem Beispiel wird die Methode assign() verwendet, um eines von zwei Panels anzuzeigen. Klicken Sie auf eine Panel-Schaltfläche, um dieses Panel dem Slot zuzuweisen, oder klicken Sie auf „Fallback anzeigen“, um die Zuweisung zu löschen und den Fallback-Inhalt des Slots anzuzeigen. Das Wechseln zwischen Panels oder das Löschen der Zuweisung entfernt die Panels nicht aus dem Schatten-Host.

Um das Löschen einer Zuweisung mit dem Entfernen eines Knotens zu vergleichen, zeigen Sie zunächst ein Panel an und klicken Sie dann auf „Zugewiesenes Panel entfernen“. Dadurch wird das Panel aus dem Schatten-Host entfernt, ohne assign() aufzurufen. Der Fallback-Inhalt sollte automatisch erscheinen. Wenn Sie zuerst auf eine andere Schaltfläche klicken, werden alle entfernten Panels wieder im Schatten-Host eingefügt.

HTML

html
<div>
  <button id="show-first">Show first panel</button>
  <button id="show-second">Show second panel</button>
  <button id="show-fallback">Show fallback</button>
  <button id="remove-panel">Remove assigned panel</button>
</div>

<div id="panels">
  <tab-panel><p>This is the first panel.</p></tab-panel>
  <tab-panel><p>This is the second panel.</p></tab-panel>
</div>

JavaScript

js
function updateDisplayTab(elem, tabIdx) {
  const shadow = elem.shadowRoot;
  const slot = shadow.querySelector("slot");
  const panels = elem.querySelectorAll("tab-panel");
  if (panels.length && tabIdx && tabIdx <= panels.length) {
    slot.assign(panels[tabIdx - 1]);
  } else {
    // Clear any previous assignment to display the slot's fallback content.
    slot.assign();
  }
}

const host = document.querySelector("#panels");
const panels = host.querySelectorAll("tab-panel");
const shadow = host.attachShadow({
  mode: "open",
  slotAssignment: "manual",
});
shadow.innerHTML = `
  <slot>
    <p>This is the fallback content. No panel is assigned.</p>
  </slot>
`;
const slot = shadow.querySelector("slot");

function restorePanels() {
  for (let i = panels.length - 1; i >= 0; i--) {
    if (panels[i].parentNode !== host) {
      host.insertBefore(panels[i], panels[i + 1] ?? null);
    }
  }
}

document.querySelector("#show-first").addEventListener("click", () => {
  restorePanels();
  updateDisplayTab(host, 1);
});

document.querySelector("#show-second").addEventListener("click", () => {
  restorePanels();
  updateDisplayTab(host, 2);
});

document.querySelector("#show-fallback").addEventListener("click", () => {
  restorePanels();
  updateDisplayTab(host, 0);
});

document.querySelector("#remove-panel").addEventListener("click", () => {
  for (const panel of slot.assignedNodes()) {
    // Remove the node without clearing its manual assignment.
    panel.remove();
  }
});

Ergebnis

Spezifikationen

Spezifikation
HTML
# dom-slot-assign

Browser-Kompatibilität

Siehe auch