Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.03.2011, 07:00
Интересующийся
Отправить личное сообщение для lynch1 Посмотреть профиль Найти все сообщения от lynch1
 
Регистрация: 15.02.2011
Сообщений: 11

Разыскивается элемент в строке
Ситуация следующая:
Есть строка допустим: "function(1,2,3);"
Её html код: "function<span>(</span>1,2,3<span>)</span>;" Т.е. скобки заключены в теги с каким-то классом.
На эти спаны повешены события onMouseOver и onMouseOut.
Событие onMouseOver подсвечивает скобку на которую навели. А также в этом же событии должен идти поиск следующей скобки, каким методом искать? Как вернуть позицию выделенного элемента? Как получить доступ к следующей скобке как к элементу DOM дерева?
Жду предложений и подсказок. Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 01.03.2011, 08:54
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,205

Сообщение от lynch1
А также в этом же событии должен идти поиск следующей скобки, каким методом искать?
Смотреть все и искать парную данной. Т.е. если все кроме одной уже закрыты и встречается закрывающеяся - это она. Это алгоритм для поиска парной для открывающейся скобки. Для поиска парной к закрывающейся немного сложнее...

Последний раз редактировалось ksa, 01.03.2011 в 08:56.
Ответить с цитированием
  #3 (permalink)  
Старый 01.03.2011, 10:17
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,577

Ну во-первых надо начинать с кода собсно разметку формирующего.
Простейший способ который срзу приходит на ум - перебор всех элементов со скобками по очереди, начиная с текущей с применением счётчиков. Т.е. если i==0 и скобка закрывающая - подсвечивать, если ещё одна открывающая - i++, закрывающая i--.

Но тут же на ум пришёл иной, более хитрый вариант: при формировании подсветки перед каждой открывающей скобкой открывать особый контейнер контейнер, после закрывающей закрывать, т.е.:
<span><span>(</span>1, ... 2,3<span>)</span></span>
Тогда открывающая и закрывающая скобки будут элементарно доступны через this.parentNode.firstChild и this.parentNode.lastChild.)
Ответить с цитированием
  #4 (permalink)  
Старый 01.03.2011, 13:07
Интересующийся
Отправить личное сообщение для lynch1 Посмотреть профиль Найти все сообщения от lynch1
 
Регистрация: 15.02.2011
Сообщений: 11

Цитата:
Тогда открывающая и закрывающая скобки будут элементарно доступны через this.parentNode.firstChild и this.parentNode.lastChild.)
О! Спасибо за вариант, наверняка подойдёт такой хитрючий ))
Всем ответившим +1
Ответить с цитированием
  #5 (permalink)  
Старый 01.03.2011, 14:07
Интересующийся
Отправить личное сообщение для lynch1 Посмотреть профиль Найти все сообщения от lynch1
 
Регистрация: 15.02.2011
Сообщений: 11

Выложу рабочий вариант, вдруг кому понадобится )
Обрабатываем скобки:
data = data.replace(/([\(\[\{])/gim,'<span>$1');
data = data.replace(/([\)\]\}])/gim,'$1</span>');
data = data.replace(/([\{\}\(\)\[\]])/gim,'<span class="sk" onMouseOver="findsk(this)" onMouseOut="hidesk()">$1</span>');

Функции подсветки:
function findsk(el) {
	el.parentNode.firstChild.style.backgroundColor = '#87CEEB';
	el.parentNode.lastChild.style.backgroundColor = '#87CEEB';
}
function hidesk() {
	el = $('.sk');
	for (i=0; i<el.length; i++) {
			el[i].style.background = 'none';
	}
}

Там кусочек из jq попал...но думаю не проблема заменить )
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить какого типа данные в строке den9000 Общие вопросы Javascript 7 07.12.2010 10:57
определить элемент на котором щелчок warobushek Events/DOM/Window 3 13.06.2010 12:04
Как добавить элемент в обьект json Юрий Игоревич Общие вопросы Javascript 2 26.10.2009 15:01
Кодировка при использовании Ajax Nichloas AJAX и COMET 9 17.09.2009 16:06
Повторение в бегущей строке DSL88 Я не знаю javascript 7 24.05.2009 23:24