Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.09.2014, 21:13
Аватар для Roman Koff
Аспирант
Отправить личное сообщение для Roman Koff Посмотреть профиль Найти все сообщения от Roman Koff
 
Регистрация: 14.04.2010
Сообщений: 46

Генератор оглавления страницы
Полезный функционал, не знаю как оптимально решить.

Есть div в котором находится некий контент страницы состоящий из h1..h2, p, ul, ol, li, a, img, table и т.д. То есть обычная веб-страница. Нужно разобрать все заголовки в диве и сформировать оглавление (как, например, делает word для многостраничного документа). Соответственно заголовкам присваиваются якоря (по порядковому номеру в иерархии) и генерируется дополнительный слой содержащий оглавление в виде дерева с ссылками на соответствующие заголовки.

Таким образом можно создавать автоматическое оглавление страницы, по примеру как сделано, например на бутстрапе.

Возможно есть уже готовые скрипты, но я что-то не нашел. Не понимаю как сформировать запрос.
Ответить с цитированием
  #2 (permalink)  
Старый 28.09.2014, 22:00
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Roman Koff
Не понимаю как сформировать запрос
Как вариант, просто селектором
$('h1, h2, h3, h4')

Пройтись по элементам и меню готово...
Ответить с цитированием
  #3 (permalink)  
Старый 29.09.2014, 10:09
Аватар для Roman Koff
Аспирант
Отправить личное сообщение для Roman Koff Посмотреть профиль Найти все сообщения от Roman Koff
 
Регистрация: 14.04.2010
Сообщений: 46

Я имею ввиду, не знаю как правильно спросить у гугля. На запрос "генератор оглавления страницы на javascript" выходит всякая туфта и т.д.

Нужно не только просканировать заголовки, но и дописать для них анкоры (согласно дерева)
Ответить с цитированием
  #4 (permalink)  
Старый 29.09.2014, 14:28
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Roman Koff
не знаю как правильно спросить у гугля
Т.е. сам-то ничего делать и не собираешся?

Сообщение от Roman Koff
Нужно не только просканировать заголовки, но и дописать для них анкоры
В том же проходе все и сделай...
Ответить с цитированием
  #5 (permalink)  
Старый 29.09.2014, 14:46
Аватар для Roman Koff
Аспирант
Отправить личное сообщение для Roman Koff Посмотреть профиль Найти все сообщения от Roman Koff
 
Регистрация: 14.04.2010
Сообщений: 46

Сообщение от ksa Посмотреть сообщение
Т.е. сам-то ничего делать и не собираешся?
Не собирался бы -- не спрашивал бы. Фрилансеров полно... Хочу сам разобраться и потом допиливать до нужного функционала. Я не дружу с JS, а хотелось бы...
Ответить с цитированием
  #6 (permalink)  
Старый 29.09.2014, 16:05
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Roman Koff
Хочу сам разобраться
Где тогда твои варианты решения? Где тестовый пример?
Ответить с цитированием
  #7 (permalink)  
Старый 30.09.2014, 16:17
Аватар для Roman Koff
Аспирант
Отправить личное сообщение для Roman Koff Посмотреть профиль Найти все сообщения от Roman Koff
 
Регистрация: 14.04.2010
Сообщений: 46

На странице присутствуют два дива, один с html-контентом, второй – в который будет сливаться оглавление.

Скрипту скармливаются id обоих.

Скрипт проходит подряд все заголовки до третьего уровня, добавляет перед ними якорь с идентификатором по порядку следования и, по сути, дублирует во второй див копию заголовков контента помещенных в ссылки, указывающие на соответствующие якоря.

Как присвоить якоря ссылкам, я, в принципе, придумал. Не знаю, как собрать сведения о заголовках и как их потом передать во второй див.

!function ($) {
	$(function () {
		var c = 1;
		$('h1, h2, h3').each(function () {
			var h = $(this)
			h.before("<a id='" + c + "'></a>");
			c++;
		});
	});
}(window.jQuery);
Ответить с цитированием
  #8 (permalink)  
Старый 30.09.2014, 17:20
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

$(function () {
  var index = 1;
  $('h1, h2, h3').each(function () {
    $(this).before("<a id='" + index + "'></a>");
    $(this).clone().appendTo("#second_div");
    index++;
  });
 });

Так, чтоли, нужно?
Ответить с цитированием
  #9 (permalink)  
Старый 30.09.2014, 20:08
Аватар для Roman Koff
Аспирант
Отправить личное сообщение для Roman Koff Посмотреть профиль Найти все сообщения от Roman Koff
 
Регистрация: 14.04.2010
Сообщений: 46

Это очень близко, спасибо. У меня получилось вот так. Теперь буду допиливать:
var line, header, title, tag, link = 0;
var pageContent = '<ul>';
$("h2, h3").each(function () {
	header = $(this);
	link++;
	header.before("<a id='par" + link + "'></a>");
	title = header.text();
	line = "<li><a href='#par" + link + "'>" + title + "</a></li>";
	pageContent += line;
});
pageContent += '</ul>';
$(".pageContent").prepend(pageContent);


Вопрос в том, как правильно скормить тег источник и как сделать функцию библиотечной, чтобы вызывать только там где нужно.
Ответить с цитированием
  #10 (permalink)  
Старый 30.09.2014, 20:39
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Можно так еще:
var list = $("<ul>"); //создание элемента ul.
...
    list.append($("<li>").append($("<a>").attr("href", link).html(title)));
...
$(".pageContent").append(list);

Цитата:
и как сделать функцию библиотечной, чтобы вызывать только там где нужно.
function myfunc(argument, second_argument) {
  alert(argument);
  alert(second_argument);
};

myfunc(1, 2); //Вызов функции. Может быть где угодно.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В Chrome жму "Назад", в место страницы выводит выводит json frost18 AJAX и COMET 6 12.08.2014 11:10
Отловить уход со страницы без учета обновления страницы IgorN Events/DOM/Window 7 12.03.2013 16:55
условие определенной страницы jQuery makingpretty jQuery 0 22.06.2011 11:17
Загрузить элементы документа с другой страницы alexrussia Events/DOM/Window 10 25.03.2011 10:17
Вычисление высоты страницы. keysi_ Events/DOM/Window 2 03.08.2010 18:03