К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Очень сложный вопрос по JS (определение позиции подчиненных элементов в массиве childNodes)

Гость
0 - 10.12.2012 - 21:39
Добрый день.

есть див. В нем - несколько элементов (в т.ч. вложенных друг в друга).
<div>

<span>1</span>

<span>2</span>

<span>3</span>

<span>4 <span>5</span> </span>

</div>

вопрос: можно ли , вызывая у главного дива онмаусовер, узнавать, является ли элемент, над которым мыша, дитём этого дива, а если да, то узнать, какой у него номер в массиве childNodes этого дива?

Пока что мысль токо - навесить на див onmouseover, выявлять таргет, проходить по ее парентнодам аж до этого дива, а вот как узнавать, какой он child у нее, это уже фиг его знает. =(

В общем, кто вкурил, просьба помочь в рассуждениях.



Гость
1 - 10.12.2012 - 22:35
думаю событие лучше вешать на span,
проверить есть ли у него определенный предок поможет джикверевский parents(), а номер дитя - джикверевский index()
Гость
2 - 10.12.2012 - 22:39
но если вешать событие на див (опять же c jQuery), то можно использовать event.currentTarget и event.target
Гость
3 - 11.12.2012 - 00:14
ага.
vk
4 - 11.12.2012 - 00:32
jQuery принимается?
Гость
5 - 11.12.2012 - 00:35
4-vk >
да, токо потом оттудова нужное выковыриваю =)
vk
6 - 11.12.2012 - 01:25
Что-то типа
<body>
<div>

<span>1</span>

<span>2</span>

<span>3</span>

<span>4 <span>5</span> </span>

</div>
<div id="logg"></div>
<script>
var mainDiv = $('body div:first');
mainDiv.find('*').mouseover(function(event)**
var currTarget = event.target;
var parentsArr = $(currTarget).parents();

var mainDivChilds = mainDiv.children();

mainDivChilds.each(function(index)**
var currMainDivChild = this;
var founded = false;
if(currTarget == currMainDivChild)**
if(founded) return false;
$('#logg').text(index);
founded = true;
**;

parentsArr.each(function()**
var currParent = this;
if(currParent == currMainDivChild)**
if(founded) return false;
$('#logg').text(index);
founded = true;
**
**);
**);
**)
</script>
</body>
vk
7 - 11.12.2012 - 01:26
Номер "ребенка" пишется $('#logg').
Считаются, естественно, только прямые дети от mainDiv
Гость
8 - 11.12.2012 - 01:30
7-vk >
но сама суть это паходу это: if(currTarget == currMainDivChild)
т.е. тупо проверка на идентичность.
токо походу нада ===
vk
9 - 11.12.2012 - 01:39
совокупность
if(currTarget == currMainDivChild) и if(currParent == currMainDivChild)
И поковыряйте поведение события
см. http://javascript.ru/tutorial/events/timing
Думаю, можно заоптимизировать
vk
10 - 11.12.2012 - 01:42
точнее, наверно, http://javascript.ru/tutorial/events/mouse
vk
11 - 11.12.2012 - 01:48
offtop
"Жаль, неосуществима идея: создать сеть ЛТП для больных дурным программизмом и упечь туда особо злостных хакеров пусть дорожки мостят и кусты стригут в рамках приведения планеты в порядок."


К списку вопросов






Copyright ©, Все права защищены