Я долгое время занимался поиском в googling и stackoverflow, и я застрял.
Задача заключается в следующем: сделать вложенную нумерацию (1.
, 1.1.
, 1.1.1
и т.д.) и для заголовков (<h2>
через <h4>
) и списки (<ol>
и <ul>
). Осложняющие пункты:Вложенная нумерация заголовков и списков
- там может быть заголовки и списки в любом количестве (например, один
h2
может иметь три вложенныеol
сек, второйh2
может иметь дваh3
с, то первымh3
имеет дваh4
сек , второй из которых имеетul
с вложеннымol
и т. д. и т. д.). И нумерация должна быть уникальной и наблюдаться по всему документу. - документ будет шаблоном для людей, несовместимых с HTML, поэтому чем меньше классов, атрибутов данных и так далее, тем лучше.
Что я уже сделал:
$(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+". ");
});
});
любое предложение высоко ценится.