Я пытаюсь добавить событие onclick
в тег определенного li
которые находятся под ul
с id #nav
.
Структура HTML:
<ul id="nav">
<li><a href="#">link1</a></li>
<li>
<a href="#">link2</a>
<ul>
<li><a href="#">innerlink1</a></li>
<li><a href="#">innerlink2</a></li>
</ul>
</li>
<li><a href="#">link3</a></li>
<li>
<a href="#">link4</a>
<ul>
<li><a href="#">innerlink1</a></li>
<li><a href="#">innerlink2</a></li>
</ul>
</li>
</ul>
Jquery
$( document ).ready(function() {
$("ul#nav li").eq(1).children().first().click(function(){
$(this).attr('onclick', 'return false;');
return false;
});
$("ul#nav li").eq(5).children().first().click(function(){
$(this).attr('onclick', 'return false;');
return false;
});
});
Если вы видите, я дважды пишу jQuery, чтобы выбрать элемент элемента li
которого есть другая ul
внутри, и добавить к нему событие onclick
. Это работает нормально. Но есть ли способ уменьшить мой код и сделать его более чистым?
Поэтому вы не хотите, чтобы li, содержащий дочерний элемент ul, запускал событие click, поэтому я думаю, что это будет так
$('#nav li:has(>ul)').click(function (event) {
event.preventDefault();
alert('click');
});
скрипку можно найти здесь: http://jsfiddle.net/552T4/3/
Эй, вы можете найти это:
$("ul#nav li:has(>ul)")
$("ul#nav li:eq(1),ul#nav li:eq(5)").children().click(function(){
e.preventDefault();
var youClicked=$(this).text();
alert(youClicked);
});
Пожалуйста, попробуйте это.
$( document ).ready(function() {
$("#nav > li").each(function(){
$(this).find('a').attr('onclick', 'return false;');
});
});
Ниже приводится сценарий этого.
В приведенном выше примере я применяю событие "onclick" ко всем якорям. если вы хотите применить только тот li, у которого есть дочерняя ul, тогда код выглядит примерно так.
$( document ).ready(function() {
$("#nav > li").each(function(){
if($(this).find('ul').length>0)
{
$(this).find('a').attr('onclick', 'return false;');
}
});
});
ниже приведена ссылка для выбранного элемента Li с Ul.
onclick
ко всем #nav > li a
. Это все якоря, а не только те, которые хочет ОП.
Да, добавьте идентификатор в нужные элементы:
Структура HTML:
<ul id="nav">
<li><a href="#">link1</a></li>
<li>
<a href="#" id="liOne">link2</a>
<ul>
<li>innerlink1</li>
<li>innerlink2</li>
</ul>
</li>
<li><a href="#">link3</a></li>
<li>
<a href="#" id="liTwo">link4</a>
<ul>
<li>innerlink1</li>
<li>innerlink2</li>
</ul>
</li>
</ul>
Jquery
$("#liOne, #liTwo").click(function(e){
e.preventDefault();
return false;
});
Или даже класс, а не id
.
Таким образом, вам нужно добавить атрибуты id/class к элементам, для которых нужно обработать событие click, вместо того, чтобы обходить DOM.
$(this).attr('onclick', 'return false;');
Что этот анти-шаблон делает в вашем коде? Убери это.