Signatur
Beschreibung
Die Methode appendItem() der Schnittstelle SVGStringList hängt einen neuen String an das Ende der Liste an. SVGStringList kommt vor allem bei den Bedingungs-Attributen aus SVGTests vor, also bei element.systemLanguage und element.requiredExtensions. Diese Attribute legen fest, ob ein SVG-Element (etwa innerhalb von <switch>) gerendert wird.
Die Liste ist live mit dem Attribut verbunden. Nach appendItem() steht der neue Wert sofort im Markup, z. B. systemLanguage="en, de". Deshalb bewertet der Browser die Bedingung auch neu. So lässt sich die Sprach- oder Feature-Auswahl in einem <switch> zur Laufzeit ändern, ohne Attribut-Strings von Hand zusammenzusetzen.
Im Gegensatz zu Arrays hat SVGStringList keine Methode push(). Zum Durchlaufen dienen numberOfItems (bzw. length) und getItem(index). In neueren Browsern ist die Liste außerdem iterierbar, sodass for…of funktioniert.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $newItem Pflicht | string | Der String, der am Ende der Liste eingefügt wird, z. B. ein Sprachkürzel wie "de" oder eine Erweiterungs-URI. Andere Werte werden in einen String umgewandelt. |
Rückgabewert
Beispiele
Sprache zu systemLanguage hinzufügen
const svgNS = 'http://www.w3.org/2000/svg';
const text = document.createElementNS(svgNS, 'text');
text.setAttribute('systemLanguage', 'en');
const langs = text.systemLanguage; // SVGStringList
const added = langs.appendItem('de');
console.log(added);
console.log(langs.numberOfItems);
console.log(text.getAttribute('systemLanguage'));
Sprachvarianten in einem <switch> dynamisch erweitern
// <svg><switch>
// <text id="gruss" systemLanguage="fr">Bonjour</text>
// <text>Hello</text>
// </switch></svg>
const gruss = document.getElementById('gruss');
// Nur hinzufügen, wenn die Sprache noch fehlt
const addLanguage = (el, lang) => {
const list = el.systemLanguage;
for (let i = 0; i < list.numberOfItems; i++) {
if (list.getItem(i) === lang) return false;
}
list.appendItem(lang);
return true;
};
console.log(addLanguage(gruss, 'de'));
console.log(addLanguage(gruss, 'de'));
console.log(gruss.getAttribute('systemLanguage'));
Mehrere Einträge anhängen und durchlaufen
const svgNS = 'http://www.w3.org/2000/svg';
const g = document.createElementNS(svgNS, 'g');
['de', 'de-AT', 'de-CH'].forEach((lang) => g.systemLanguage.appendItem(lang));
for (let i = 0; i < g.systemLanguage.numberOfItems; i++) {
console.log(i, g.systemLanguage.getItem(i));
}
// Wichtig · Fallstricke
- Doppelte Einträge: Nach SVG 2 prüft
appendItem()nicht, ob ein Wert schon in der Liste steht. Wer keine Duplikate will, muss vorher selbst prüfen (siehe Beispiel 2). In SVG 1.1 wurde ein bereits vorhandenes Element zuerst entfernt. Auf dieses alte Verhalten sollte man sich nicht verlassen. - Schreibgeschützte Listen: Ist die Liste schreibgeschützt, wirft die Methode eine
DOMExceptionvom TypNoModificationAllowedError. - Serialisierung: Die Einträge werden im Attribut je nach Liste mit Komma oder Leerzeichen getrennt, bei
systemLanguagez. B. als"en, de". Leerzeichen innerhalb eines Eintrags können dazu führen, dass der Wert beim erneuten Einlesen anders aufgeteilt wird. - Veraltet:
requiredFeatureswurde aus SVG 2 entfernt und liefert in modernen Browsern keineSVGStringListmehr. Nutze stattdessensystemLanguageoderrequiredExtensions. - Kompatibilität: Die Methode wird in allen aktuellen Browsern (Chrome, Edge, Firefox, Safari) unterstützt. Die Eigenschaft
lengthund die Iteration mitfor…ofgibt es erst in neueren Versionen.numberOfItemsundgetItem()funktionieren überall.