Форум на Kuban.ru (http://forums.kuban.ru/)
-   Веб-дизайн и программирование (http://forums.kuban.ru/f1030/)
-   -   Очень сложный вопрос по JS (определение позиции подчиненных элементов в массиве childNodes) (http://forums.kuban.ru/f1030/ochen-_slozhnyj_vopros_po_javascript_opredelenie_pozicii_podchinennyh_elementov_v_massive_childnodes-3415646.html)

ars_2007 10.12.2012 21:39

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

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

<span>1</span>

<span>2</span>

<span>3</span>

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

</div>

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

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

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

toly84 10.12.2012 22:35

думаю событие лучше вешать на span,
проверить есть ли у него определенный предок поможет джикверевский parents(), а номер дитя - джикверевский index()

toly84 10.12.2012 22:39

но если вешать событие на див (опять же c jQuery), то можно использовать event.currentTarget и event.target

ars_2007 11.12.2012 00:14

ага.

vk 11.12.2012 00:32

jQuery принимается?

ars_2007 11.12.2012 00:35

4-vk >
да, токо потом оттудова нужное выковыриваю =)

vk 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 11.12.2012 01:26

Номер "ребенка" пишется $('#logg').
Считаются, естественно, только прямые дети от mainDiv

ars_2007 11.12.2012 01:30

7-vk >
но сама суть это паходу это: if(currTarget == currMainDivChild)
т.е. тупо проверка на идентичность.
токо походу нада ===

vk 11.12.2012 01:39

совокупность
if(currTarget == currMainDivChild) и if(currParent == currMainDivChild)
И поковыряйте поведение события
см. [url]http://javascript.ru/tutorial/events/timing[/url]
Думаю, можно заоптимизировать

vk 11.12.2012 01:42

точнее, наверно, [url]http://javascript.ru/tutorial/events/mouse[/url]

vk 11.12.2012 01:48

offtop
"Жаль, неосуществима идея: создать сеть ЛТП для больных дурным программизмом и упечь туда особо злостных хакеров пусть дорожки мостят и кусты стригут в рамках приведения планеты в порядок."


Текущее время: 17:42. Часовой пояс GMT +3.