Спасибо за ответы, это нужно было для одного скрипта для шпаргалки. Скрипт сортирует абзацы и выводит их в отсортированном виде, при смене буквы выводит якорь на эту букву, а в начале страницы выводит весь алфавит для быстрой навигации по шпаргалке. Результат можно посмотреть
здесь. Выкладываю исходники (может кому-то пригодится).
Дан например HTML:
<body>
...
<p>О.п.с.т.по с.с п. <strong>(Возможность трансформирования)</strong></p>
<p>В б.с.м.п.ч.с.т.д.э.у.50Гц. У.ч. <strong>(Неприемлемо, так как при этом становится заметным мигание ламп накаливания)</strong></p>
<p>П.ч.с.т.д.э.у.50Гц н. <strong>(т.к. за счет увеличения ЭДС самоиндукции ухудшается режим передачи энергии по проводам)</strong></p>
<p>О.е.м.п.в с.СИ <strong>(Вебер)</strong></p>
<p>П.м.п.со в.в.к. <strong>(Ψ = πФ<sub>1</sub>)</strong></p>
...
</body>
Скрипт:
var find = function(array, value){
for(var i=0; i < array.length; i++){
if (array[i] === value) return i;
}
return -1;
}
function winWidth(){
document.body.style.width = window.innerWidth;
}
window.onresize = winWidth;
//В момент полной загрузки страницы
window.onload = function(){
//Назначение ширины окна = ширине экрана телефона
document.body.style.width = screen.availWidth;
//Сортировка по алфавиту
var p = document.getElementsByTagName('p');
var paragraphs = new Array();
var alphabet = new Array();
for(var i = 0; i <= p.length; i++){
if((p[i]) && (p.item(i).hasChildNodes())){
paragraphs.push(p[i].innerHTML);
if((p.item(i).firstChild.nodeValue) && (find(alphabet, p.item(i).firstChild.nodeValue.substring(0, 1)) == -1))
alphabet.push(p.item(i).firstChild.nodeValue.substring(0, 1));
}
}
alphabet = alphabet.sort(); //Сортировка алфавита
paragraphs = paragraphs.sort(); //Сортировка параграфов
//Вывод алфавита
var ul = document.createElement('ul');
ul.className = 'alphabet';
for(var x = 0; x <= alphabet.length; x++){
if(alphabet[x] == undefined) continue;
var li = document.createElement('li');
var myLink = document.createElement('a');
var href = '#w' + x;
myLink.setAttribute('href', href);
myLink.appendChild(document.createTextNode(alphabet[x]));
li.appendChild(myLink);
ul.appendChild(li);
}
document.body.insertBefore(ul, document.getElementsByTagName('p').item(0));
//Иницилизация служебных переменных
var firstSymbol = new String();
var myAnchor = new String();
var counter = new Number(0);
//Создание элементов навигации
var begin = document.createElement('a');
begin.setAttribute('href', '#begin');
begin.appendChild(document.createTextNode('в начало'));
var end = document.createElement('a');
end.setAttribute('href', '#end');
end.appendChild(document.createTextNode('в конец'));
var nav = document.createElement('div');
nav.className = 'nav';
nav.appendChild(begin);
nav.appendChild(end);
//Вставка навигации и сортировка
for(var i in p){
if((p[i]) && (paragraphs[i]) && (p.item(i).hasChildNodes()) && (p.item(i).firstChild.nodeType == 3)){
if((paragraphs[i].toString().substring(0, 1) !== firstSymbol) && (counter < alphabet.length)){
firstSymbol = paragraphs[i].toString().substring(0, 1);
myAnchor = 'w' + counter;
var word = document.createElement('a');
word.setAttribute('name', myAnchor);
word.appendChild(document.createTextNode(' = ' + firstSymbol + ' = '));
nav.insertBefore(word, nav.childNodes.item(1));
document.body.insertBefore(nav.cloneNode(true), p.item(i));
nav.removeChild(nav.childNodes[1]);
counter++;
}
p[i].innerHTML = paragraphs[i];
}
}
//Добавление якорей
var beginAnchor = document.createElement('a');
beginAnchor.setAttribute('name', 'begin');
var endAnchor = document.createElement('a');
endAnchor.setAttribute('name', 'end');
document.body.insertBefore(beginAnchor, document.body.firstChild);
document.body.appendChild(endAnchor);
//Назначение события при фокусе
var myFocus = document.getElementsByTagName('a');
for(var y = 0; y <= myFocus.length; y++){
if((myFocus.item(y)) && (myFocus.item(y).parentNode.nodeName == 'LI') && (myFocus.item(y).getAttribute('href'))){
var hash2 = myFocus.item(y).getAttribute('href');
//myFocus.item(y).setAttribute('onfocus', "location.replace(" + location.host + location.pathname+")");
}
}
//Переход по ссылке при получении фокуса
var links = document.getElementsByTagName('a');
for (var i = 0, max = links.length; i < max; i++){
links[i].onfocus = function(){
this.href && (document.location.href = this.href);
}
}
}