Thread Eingerückte hierarchische Liste (HTML) erzeugen (9 answers)
Opened by GwenDragon at 2023-12-21 11:45

haj
 2023-12-21 18:45
#195716 #195716
User since
2015-01-07
558 Artikel
BenutzerIn

user image
Das mit den geschachtelten HTML-Listen verstehe ich nicht: Du hast in Deinem Beispiel Sprünge um zwei Einheiten "nach unten" (0 -> 2 und 1 -> 3). In einer geschachtelten HTML-Struktur geht es immer nur um eine Stufe "nach unten", wenn eine untergeordnete Liste aufgemacht wird. Die bekommt dann ein neues Bullet oder eine Nummer, zwei Bullets unmittelbar hintereinander sehen eigentlich immer falsch aus. "Nach oben" können aber beliebig viele Hierarchiestufen auf einmal wegfallen.

Man kann das entweder mit Rekursion lösen, wie von rosti vorgeschlagen, oder direkt die Liste durcharbeiten.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use 5.024;
use strict;
use warnings;

my @list_data = (
    { indent => 0, text => "Test 1" },
    { indent => 2, text => "Test 2" },
    { indent => 1, text => "Test 3" }, { indent => 1, text => "Test 4" },
    { indent => 3, text => "Test 5" },
);

my $type = q(ol);
my $level = -1;
my $html = q(<!DOCTYPE html>);

for my $element (@list_data) {
    if ($level < $element->{indent}) {    # Stufen einfuegen
        $html .= qq(<$type><li>)       x ($element->{indent} - $level);
    }
    elsif ($level > $element->{indent}) { # Stufen schliessen
        $html .= qq(</li></$type><li>) x ($level - $element->{indent});
    }
    else {                                # Gleiche Ebene
        $html .= q(</li><li>);
    }
    $level = $element->{indent};
    $html .= $element->{text};
}

# Cleanup: Close open lists
$html .= q(</li></ol>) x ($level+1);

print $html;

View full thread Eingerückte hierarchische Liste (HTML) erzeugen