Hallo JürgenB,
das ist aber für die Problemstellung irrelevant. Wenn's eine Liste wird, gibt es ebenfalls Checkboxen und man muss von der Checkbox zum Werte-Span kommen.
An der prinzipiellen Vorgehensweise ändert sich nichts. Man muss die aktiven Checkboxen finden, von dort zum Zeilencontainer und weiter zum Span.
Vertrauen in fehlerfreies HTML vorausgesetzt, ist das tatsächlich als Einzeiler machbar:
let summe = Array.prototype.reduce.call(
table.querySelectorAll("[name='myAuswahl[]']:checked"),
((sum, cb) => sum + parseInt(cb.closest("tr").querySelector(".myKB").textContent)),
0);
Das muss mit reduce.call gemacht werden, weil die Nodelist die reduce-Methode nicht kennt. Die Implementierung auf Array.prototype kommt aber mit Nodelisten klar.
Etwas ausführlicher und ohne Array.reduce:
let checked = table.querySelectorAll("[name='myAuswahl[]']:checked")
let summe = 0;
checked.forEach(cb => {
let row = cb.closest("tr");
let kbSpan = row.querySelector(".myKB");
let value = parseInt(kbSpan.textContent);
summe = summe + value;
});
Verwendet man eine Liste statt einer Table, muss man die Variable table mit der Liste initialisieren und statt closest("tr") setzt man closest("li") - oder ähnlich, je nach verwendetem Listen-Element-Container.
Einen Polyfill für closest findet man bei Mozilla.
Rolf
--
sumpsi - posui - clusi