I have the fairly simple markup below and am trying to only get only the checkboxes under the first level LI (Main 1 and Main 2), not the deeper ones.
<ul id="el"> <li> <input type="checkbox" value="1" /> - Main 1 <ul> <li> <input type="checkbox" value="1" /> - Sub 1 </li> <li> <input type="checkbox" value="1" /> - Sub 2 <ul> <li> <input type="checkbox" value="1" /> - Sub 2 Sub 1 </li> </ul> </li> </ul> </li> <li> <input type="checkbox" value="1" /> - Main 2 </li> </ul> Using $("#el").find("li input") gets all 5 checkboxes. I've tried multiple variations of find("li input").not("li ul input") as well as using :not() in the selector which doesn't work. One way that did finally work: var notgroup = $("#el").find("li ul input"); $("#el").find("li input").not(notgroup) Why does it work if there is a variable which is the result of the selector, but not the selector itself? Is there any better way to do this?