Если вы хотите сделать это кросс-браузер с JQuery:
$("ol#list ol").each(function(i, el){
$(this).children().each(function(ci,cel){
$(this).prepend('<span class="pseudo-num">' + [i + 1, ci + 1].join('.') + ' </span>');
});
}).addClass('pseudo-processed');
И в вашем CSS:
ol .pseudo-num { display: none }
ol.pseudo-processed { list-style: none; padding-left: 0 }
ol.pseudo-processed .pseudo-num { display: inline; font-weight: bold }
Это только для одного уровня. Вы можете изменить код, чтобы создать рекурсивную функцию для нескольких уровней.
Это настройка для постепенного улучшения вашей страницы. Без Javascript она вернулась бы к обычной вложенной нумерации.
ОБНОВЛЕНИЕ : Благодаря работе @ Gumbo я переработал этот код в рекурсивный плагин. Он будет использовать тот же CSS, что и в моем предыдущем примере, но теперь это «полноценный» плагин jQuery с поддержкой любой глубины:
$.fn.outline = function(options, counters){
var options = $.extend({}, $.fn.outline.defaults, options),
counters = counters || [];
this.each(function(){
$(this).children('li').each(function(i){
var ct = counters.concat([i + 1]);
if(counters.length){
$('<span></span>')
.addClass(options.numberClass)
.text(ct.join('.') + ' ')
.prependTo(this);
}
$(this).children('ol').outline(options, ct);
})
});
if(!counters.length) this.addClass(options.processedClass)
}
$.fn.outline.defaults = {
numberClass: 'pseudo-num',
processedClass: 'pseudo-processed'
}
Затем вы можете вызвать его на определенном #id
:
$("#list").outline();
Или используйте хороший селектор @ Gumbo, чтобы применить его ко всем ol
тегам на одной странице:
$("ol:not(li > ol)").outline();
И вы можете переопределить значения по умолчанию глобально или индивидуально:
$.fn.outline.defaults.processedClass = 'ol-ready';
// or
$("#list").outline({processedClass: 'ol-ready'});