Если вы измените свой начальный селектор так, чтобы он нацеливался на первые дочерние якоря «контента», как это:
$('#content > ul > li > a').click(function(e) {
/* code to show/hide submenus */
console.log(e);
e.preventDefault();
});
Это будет работать.Я бы порекомендовал просто добавить класс css к каждому тегу привязки, с которым вы хотите связать событие click.Это будет намного чище и с меньшей вероятностью сломается при изменении разметки.
<div id="content">
<ul>
<li><a class="mainNav" href="#">1</a></li>
<li><a class="mainNav" href="#">2</a></li>
<li>
<a class="mainNav" href="#">3</a>
<ul>
<li><a href="#">A</a></li>
<li><a href="#">B</a></li>
<li><a href="#">C</a></li>
<li><a href="#">D</a></li>
</ul>
</li>
<li><a class="mainNav" href="#">4</a></li>
</ul>
</div>
и
$("#content .mainNav").click(function(e) { e.preventDefault(); });
Обновление
ВашОригинальный ответ был действительно близок.Проблема заключалась в том, что вы выбирали все элементы-потомки li.Я добавил селектор детей, чтобы исправить это.
$('#content ul li').has('ul').children('a').click(function(e) {
/* code to show/hide submenus */
console.log(e);
e.preventDefault();
});