Если дочерний div существует связать событие, если он не делает, тогда не связывать

Я только начал изучать jquery, поэтому, пожалуйста, успокойся.

Я пытаюсь создать меню слайдов, когда при нажатии кнопки меню открывается, показывая меню, когда щелкнули элемент меню, подменю, относящееся к выбору, выскочит и заменит существующее меню, но я "Я застрял на определенной части. В тот момент, когда вы нажимаете на элемент списка, мой код jquery предотвращает обработку ссылки и вместо этого показывает подменю, которое является правильным, но как только вы дойдете до конца, и там нет дополнительных подменю, ссылки не работают.

То, что я пытаюсь достичь, - это если умен.menu ul li есть дочерний div, называемый подменю, а затем предотвращать по умолчанию, если у него нет дочернего div под названием sub, а затем оставить его в покое.

Я искал весь день, и я только начал изучать эту последнюю неделю.

Здесь html

<ul>
 <li><a href="one" target="_blank">1</a></li>
 <li><a href="two" target="_blank">2</a>
 <ul>
 <li><a href="two-one" target="_blank">3-1</a></li>
 </ul>
 </li>
 <li><a href="three" target="_blank">3</a>
 <ul>
 <li><a href="three-one" target="_blank">3-1</a></li>
 <li><a href="three-two" target="_blank">3-2</a>
 <ul>
 <li><a href="three-two-one" target="_blank">3-2-1</a></li>
 </ul>
 </li></ul>
 </li>
 <li><a href="four" target="_blank">4</a></li>
 </ul>

Здесь часть jquery, на которую я застрял

$('nav ul li').click(function(e) {
 e.preventDefault();
 $('.sub-menu').toggleClass('open');
});
2 ответа

Вам просто нужно использовать селектор: :has():

$('nav ul li:has(.sub-menu)').click(function(e) {

});

В качестве предложения для производительности я рекомендую привязать обработчик делегата к элементу nav и удалить ненужную ul в выборе. Вы, вероятно, также хотели искать в согласованном элементе, а не переключать все элементы .sub-menu:

$('nav').on('click', 'li:has(.sub-menu)', function (e) {
 e.preventDefault();
 $(this).find('.sub-menu').toggleClass('open');
});


Я не так хорош, но это может помочь:

if( $('#element').find('*').length > 0 ) {
 // Do something
 $('#element').click( function () { } );
}

Справка:

http://api.jquery.com/find/

Вы можете добиться того же, используя children() вместо find('*').

http://api.jquery.com/children/

licensed under cc by-sa 3.0 with attribution.