Ich google und stapleoverflow'ing für eine ziemlich lange Zeit und ich stecke fest.
Die Aufgabe ist die folgende: make nested Numerierung (1.
, 1.1.
, 1.1.1
etc.) sowohl für Überschriften (<h2>
durch <h4>
) und Listen (<ol>
und <ul>
). Die komplizieren Punkte sind:Verschachtelte Nummerierung von Überschriften und Listen
- es könnte Schriften und Listen in beliebiger Menge sein (beispielsweise ein
h2
drei verschachteltenol
s haben kann, die zweiteh2
zweih3
s haben kann, dann wird der ersteh3
zweih4
s , der zweite von denen hatul
mit einem verschachteltenol
, und so weiter). Und die Nummerierung sollte einmalig sein und über das gesamte Dokument beobachtet werden. - das Dokument wird eine Vorlage für Leute nicht soo agil mit HTML sein, also je weniger Klassen, Daten-Attribute und so weiter, desto besser.
Was habe ich schon gemacht:
$(function() {
indices = new Array();
// Not every element should be numbered, so I've added a class to those who should
$(".item").each(function() {
// I'm assigning the level manually, like this:
// <h4 class="item" data-level="3">blah blah</h4>
// any better solution is welcome
var hIndex = parseInt($(this).data("level"));
if (indices.length - 1 > hIndex) {
indices= indices.slice(0, hIndex + 1);
}
if (indices[hIndex] == undefined) {
indices[hIndex] = 0;
}
indices[hIndex]++;
// Now I try to number lists and nested lists, and here I'm stuck
if ($(this).is("ol, ul")) {
var $that = $(this);
$(this).find("li").each(function() {
// Trying to add those attributes to <li>s... no dice :(
$(this).addClass("item");
$(this).data("level", $that.data("level")+1);
});
}
var number = $.grep(indices, Boolean).join(".");
$(this).prepend(number+". ");
});
});
jeder Vorschlag wird sehr geschätzt.