Показать сообщение отдельно
  #5 (permalink)  
Старый 27.10.2013, 13:35
Новичок на форуме
Отправить личное сообщение для developer Посмотреть профиль Найти все сообщения от developer
 
Регистрация: 25.07.2013
Сообщений: 5

Спасибо за ответы, это нужно было для одного скрипта для шпаргалки. Скрипт сортирует абзацы и выводит их в отсортированном виде, при смене буквы выводит якорь на эту букву, а в начале страницы выводит весь алфавит для быстрой навигации по шпаргалке. Результат можно посмотреть здесь. Выкладываю исходники (может кому-то пригодится).

Дан например HTML:
<body>
...
<p>О.п.с.т.по с.с п. <strong>(Возможность трансформирования)</strong></p>
<p>В б.с.м.п.ч.с.т.д.э.у.50Гц. У.ч. <strong>(Неприемлемо, так как при этом становится заметным мигание ламп накаливания)</strong></p>
<p>П.ч.с.т.д.э.у.50Гц н. <strong>(т.к. за счет увеличения ЭДС самоиндукции ухудшается режим передачи энергии по проводам)</strong></p>
<p>О.е.м.п.в с.СИ <strong>(Вебер)</strong></p>
<p>П.м.п.со в.в.к. <strong>(&Psi; = &pi;Ф<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);
		}
	}
}
Ответить с цитированием