Я думаю, что вы ищете, вероятно, event.stopPropagation ()
Вот документация: http://api.jquery.com/event.stopPropagation/
По сути, происходит то, что, когда вы нажимаете на <a>
событие click срабатывает, но, поскольку оно содержится в <li>
, событие click также вызывается для него.Этот процесс события, переходящего от дочернего к родительскому, называется пузырением событий.Вы можете использовать event.stopPropagation (), чтобы остановить его.
Предположим, у вас есть такая структура HTML:
<ul>
<li class="reveal">One<br />
<a href="http://www.google.com" target="_blank">Google</a>
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
</li>
<li class="reveal">Two<br />
<a href="http://www.google.com" target="_blank">Google</a>
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
</li>
<li class="reveal">Three<br />
<a href="http://www.google.com" target="_blank">Google</a>
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
</li>
</ul>
Далее, мы скажем, что у вас есть правило CSS:
ul ul { display: none; }
Примените этот jQuery, и вы получите желаемый результат:
$(function () {
$('.reveal').click(function() {
$(this).children('ul').slideToggle();
});
$('.reveal a').click(function(event) {
event.stopPropagation();
});
});
Вот демонстрация этого в действии: http://jsfiddle.net/PaxTg/