Reputation: 967
I'm working on a menu where i need to use jQuery to target parent elements, but I can't get the jQuery :has
selector to work.
<nav>
<div>
<ul>
<li>Link</li>
<li>Link</li>
<ul>
<li>Link</li>
<li>Link</li>
<li>Link</li>
</ul>
<li>Link</li>
<li>Link</li>
<ul>
<li>Link</li>
<li>Link</li>
<li>Link</li>
</ul>
<li>Link</li>
<li>Link</li>
</ul>
</div>
</nav>
$('nav > div > ul > li:has(ul)').addClass('parent');
$('nav > div > ul > li:has(ul)').click(function() {
alert('test');
});
Upvotes: 0
Views: 149
Reputation: 398
You need to add your submenu <ul>
inside of <li>
Find the demo here: http://jsfiddle.net/sYLdd/
HTML:
<nav>
<div>
<ul>
<li>Link</li>
<li>Link
<ul>
<li>Link</li>
<li>Link</li>
<li>Link</li>
</ul>
</li>
<li>Link</li>
<li>Link
<ul>
<li>Link</li>
<li>Link</li>
<li>Link</li>
</ul>
</li>
<li>Link</li>
<li>Link</li>
</ul>
</div>
</nav>
CSS:
.parent {
color: red;
}
jQuery:
jQuery(function() {
jQuery('nav li').addClass('no-parent');
jQuery('nav li:has(ul)').removeClass('no-parent').addClass('parent');
});
Upvotes: 1
Reputation: 93551
Even the simplest case of 'li:has(ul)' does not work as your ULs are not actually inside your LIs. Fix your HTML as follows:
<nav>
<div>
<ul>
<li>Link</li>
<li>Link
<ul>
<li>Link</li>
<li>Link</li>
<li>Link</li>
</ul>
</li>
<li>Link</li>
<li>Link
<ul>
<li>Link</li>
<li>Link</li>
<li>Link</li>
</ul>
</li>
<li>Link</li>
<li>Link</li>
</ul>
</div>
</nav>
Upvotes: 2
Reputation: 395
I am not sure why you want to use jQuery to target the ul, Maybe you can just add your class to the ul.
<ul class="parent"></ul>
Upvotes: -1