Краткий вопрос
Я выполняю dojo.query()
и применяю обработчик событий ко всем возвращаемым узлам, используя функцию NodeList.onmouseenter()
. Однако, когда один из этих узлов запускает событие, мне нужно знать, каким оно было, чтобы я мог пройти DOM из местоположения этого конкретного узла. Как я могу получить ссылку на этот конкретный узел во время запуска?
Длинный вопрос в полном контексте
Я пытаюсь адаптировать навигационное меню на основе jQuery ( см. Обзор и полный исходный код ) для работы в среде Dojo. В двух словах, HTML выглядит так:
<ul class="topnav">
<li><a href="#">Home</a></li>
<li>
<a href="#">Tutorials</a>
<ul class="subnav"> <!-- This CSS class hides the <ul> on page load -->
<li><a href="#">Sub Nav Link</a></li>
<li><a href="#">Sub Nav Link</a></li>
</ul>
<span></span> <!-- CSS fills the <span> with an image -->
</li>
...
Самый внешний тег <ul>
представляет меню навигации в целом ... а вложенные теги <ul>
- это то место, где пункт меню имеет раскрывающееся подменю. Такие пункты меню также имеют тег <span>
для отображения изображения стрелки и упрощения идентификации во время обхода DOM.
Итак, код jQuery добавляет обработчик событий ко всем этим <span>
тегам. Приведенная выше ссылка на учебник использует "onClick
", но я планирую изменить его на hover (то есть "onmouseenter
" и "onmouseleave
"). В любом случае, триггер события вызывает скрытое подменю с эффектом jQuery «slideDown
» (эквивалентно «wipeIn
» Додзё).
$("ul.topnav li span").click(function() {
$(this).parent().find("ul.subnav").slideDown('fast').show();
});
Чтобы перейти от <span>
к вложенному <ul>
, обработчик событий сканирует DOM на один уровень вверх, а затем на один уровень вниз ... начиная с $(this)
. Это часть, которая убивает меня в Додзё! Я пробовал десятки вариантов, но вот мой текущий (неработающий) код:
dojo.require("dojo.fx");
dojo.require("dojo.NodeList-traverse");
dojo.require("dojo.NodeList-manipulate");
dojo.ready(function(){
dojo.query("ul.topnav li span").onmouseenter(function(node) {
node.siblings("ul.subnav").wipeIn().play();
});
}
Внутри функций подключения к событиям NodeList
Додзё (например, onmouseenter
) я не могу понять, как получить ссылку времени запуска на узел, который был запущен. Анонимная функция, которую я передаю «onmouseenter
», принимает параметр под названием «node
», но это только мое желаемое за действительное. Додзё на самом деле не проходит такую ссылку.
Мне нужен эквивалент $(this)
во второй строке приведенного выше фрагмента jQuery. Ссылка на конкретный узел, который был вызван событием, так что я могу пройти DOM из местоположения этого конкретного узла. Есть ли простой способ сделать это с помощью NodeList
Додзё, который мне просто не хватает?