How do I select all inputs except under a specific id?

Jose A picture Jose A · Aug 13, 2012 · Viewed 22k times · Source

What I want to do is to select all the inputs buttons on the document, except those that reside under a specific id.

Example:

<body>
<input type="button">

<div id="something">
     <input type="button">
</div>
<div id="something2">
     <input type="button">
</div>


<input type="button">
<input type="button">
<input type="button">
</body>

For example, I would like to select all the inputs, except those that resides under the <div> whose id is "something".

What I've tried:

1) $('input[type="button"]:not(:parent(#something))').addCSS();

2) $('input[type="button"] :not(#something input[type="button"])')

And other similar approaches

Answer

jfriend00 picture jfriend00 · Aug 13, 2012

You can do it like this (relatively efficiently).

$("input[type=button]").filter(function() {
    return $(this).closest("#something").length == 0;
});

First, you get all the input[type=button] elements, then remove those with #something as a parent.

Another possibility is this:

$("input[type=button]").not("#something input[type=button]")

You'd have to test both to see which is more efficient, but either will work.

Working demo of both: http://jsfiddle.net/jfriend00/fjxDb/