Kann ein wenig am Schlafmangel liegen, aber ich versteh den Sinn nicht ganz. 'elements' enthält entweder null oder nur das erste Element mit der id 'sel'. Wozu also eine Schleife und überhaupt das holen des Elements via getElementById, wenn du dann sowieso wie in diesem Fall z.bsp. JSON.parse(sel) aufrufen willst?
Mal davon abgesehen, dass Ids, wie der Name schon nahelegt, eindeutig sein sollten.
Und wie mein Vorredner bereits geschrieben hat, elements.id ist natürlich 'sel'. Dass das kein gültiges Json ist, sollte klar sein. Lass mal das .id weg.
Sauberer wäre, du überarbeitest deine HTML Elemente, vergibst echte Ids und selektierst über Attribute, die mehrfach vorkommen dürfen z.B. name oder data-abc.
Das Problem werden die eckigen Klammern sein. Die haben da eigentlich nichts verloren, ist ja kein Array und ein JSON-String beginnt mit geschweifter Klammer.
Ist halt ein Array der Länge 1, daran liegt es nicht.
Habe auch schon ohne getestet.
Ich habe das ganze jetzt in ein Array gepackt, somit muss ich immer auf das selbe json-Element zugreifen und kann den Namen direkt im Code stehen lassen.
Danke an alle Helfer.