var lengthH2 = $('#contentInner h2').length;
if(lengthH2>0){
$('<ul></ul>').appendTo('#indexMenu>ul>li');
for(i=0;i<lengthH2;i++){
var nodes = document.getElementsByTagName('*'), i = nodes.length;
var el = document.querySelector('h2'), findTag = 'H1';
while(i--) if(nodes[i] === el) break;
while(i--) if(nodes[i].tagName === findTag) break;
if(nodes[i]) var parentClass = nodes[i].className;
//var parentClass = $('#contentInner h2').eq(i).parents().prev('h1, :has(h1):first').attr('class');
if($('#contentInner h2:not(#pagetitle)').eq(i).text().length>50){
var text = '<li class="h2-'+i+'"><a href="[[~[[*id]]]]#h2-'+i+'" title="'+$('#contentInner h2:not(#pagetitle)').eq(i).text().replace(/^\s*|\s+$/g, '').replace(/\t|\n/g, ' ')+'">'+$.trim($('#contentInner h2:not(#pagetitle)').eq(i).text().slice( 0, 50 )) + '…'+'</a></li>'
}else{
var text = '<li class="h2-'+i+'"><a href="[[~[[*id]]]]#h2-'+i+'">'+$('#contentInner h2:not(#pagetitle)').eq(i).text().replace(/^\s*|\s+$/g, '').replace(/\t|\n/g, ' ')+'</a></li>'
}
$('#contentInner h2').eq(i).addClass('h2-'+i) // .append('<a name="h2-'+i+'"></a>');
$(text).appendTo('#indexMenu>ul>li.'+parentClass+'>ul');
}
}
Почему-то в if(nodes[i]) var parentClass = nodes[i].className; всего один раз получает класс.