Как выбрать все входы, кроме определенного идентификатора?

Что я хочу сделать, так это выбрать все кнопки ввода в документе, кроме тех, которые находятся под определенным идентификатором.

Пример:

<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>

Например, я хотел бы выбрать все входы, кроме тех, которые находятся под <div>, чей id является "чем-то".

Что я пробовал:

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

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

И другие подобные подходы

Ответ 1

Вы можете сделать это так (относительно эффективно).

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

Сначала вы получаете все элементы input[type=button], а затем удаляете те, у которых #something, как родительский.

Другая возможность такова:

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

Вам нужно будет проверить оба, чтобы увидеть, какая из них более эффективна, но либо будет работать.

Рабочая демонстрация обоих: http://jsfiddle.net/jfriend00/fjxDb/

Ответ 2

Вы были почти там, все, что вам нужно было сделать, это удалить пространство перед вашим: нет.

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

Я знаю, что это старый вопрос, но он появляется сначала в Google, а использование jquery.not(), как показано в принятом ответе, не всегда является опцией.

Ответ 3

Возможно, это работает: $(":not(#something) input[type=button]")