Вы можете использовать previousElementSibling
, чтобы шаг за шагом перейти к началу списка и просто посчитать, сколько прыжков вы сделали:
ol.onclick = function(e) {
var li = e.target,
i = 1;
while ( li.previousElementSibling ) {
li = li.previousElementSibling;
i += 1;
}
alert( 'Index = ' + i );
};
Обратите внимание, что обход элемента не реализован в IE8 или ниже (но в IE9).
Демо: http://jsfiddle.net/simevidas/U47wL/
Если у вас установлен атрибут start
для элемента OL, просто измените строку, в которой объявлено i
, сделайте следующее:
i = ol.start || 1;
Демонстрационная версия: http://jsfiddle.net/simevidas/U47wL/2/
Если вам требуется решение кросс-браузер , вы можете использовать previousSibling
, а затем проверить, является ли брат или сестра элементом узла, и его приращение увеличивается только тогда:
ol.onclick = function(e) {
var e = e || window.event,
li = e.target || e.srcElement,
i = ol.start || 1;
while ( li.previousSibling ) {
li = li.previousSibling;
if ( li.nodeType === 1 ) { i += 1; }
}
alert( 'Index = ' + i );
};
Демонстрационная версия: http://jsfiddle.net/simevidas/U47wL/4/
Решение jQuery:
$('ol').click(function(e) {
var n = $(e.target).index() + this.start;
alert( 'Index = ' + n );
});
Демонстрационная версия: http://jsfiddle.net/simevidas/U47wL/5/