How would I select only the first level .block and not any of the children?
$('.block:not("Children of this here")')
<--
<div class="block"> <!-- this -->
<div class="block"> <!-- not this -->
<div class="block"> <!-- not this -->
</div>
</div>
</div>
<div class="block"> <!-- and this -->
<div class="block"> <!-- not this -->
<div class="block"> <!-- not this -->
</div>
</div>
</div>
By using the :not(:first-child) selector, you remove that problem. You can use this selector on every HTML element. Another common use case is if you use an unordered list <ul> for your menu.
How can I get all of the elements with the same class name in JavaScript? Using JavaScript – querySelector() function The querySelectorAll() method returns all elements within the document having the same class. To get the first element that matches the specified selector, you can use the querySelector() method.
When designing and developing web applications, sometimes we need to select all the child elements of an element except the last element. To select all the children of an element except the last child, use :not and :last-child pseudo classes.
The :empty CSS pseudo-class represents any element that has no children.
If that sample markup has a parent element, for example below. If not, the parent will be body
if it is valid HTML.
<div id="parent">
<div class="block">
<div class="block">
<div class="block">
</div>
</div>
</div>
</div>
$('#parent > .block').css({ border: '1px solid red' });
You can use the :first
selector to select only the first matching .block
element:
$('.block:first')
This works because jQuery matches elements in document order. The outermost .block
element will be the first element matched by .block
, and :first
will filter to only return it.
Note that :first
is not the same as :first-child
.
EDIT: In response to your update, you can write the following, which will only work if all of the elements are nested three deep:
$('.block:note(:has(.block .block))')
You can write a more robust solution using a function call:
$('.block').not(function() { return $(this).closest('.block').length; })
This will find all .block
elements, then remove any matched elements that have an ancestor matching .block
. (You can replace closest
with parent
if you want to).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With