Почему «выбранные» варианты скрыты? - PullRequest
12 голосов
/ 03 октября 2011

У меня есть HTML-код, подобный этому:

<select name="something">
    <option value="a">1</option>
    <option value="b">2</option>
    <option value="c">3</option>
</select>

и я заметил, что jquery интерпретирует, что параметры являются скрытыми тегами HTML. Проблема возникает, когда мне нужно удалить настоящие скрытые теги, как в этом примере:

<form action="#" id="f">
    <select name="something">
        <option value="a">1</option>
        <option value="b">2</option>
        <option value="c">3</option>
    </select>
    <p style="display:none">hello world</p>
    <any_tag style="display:none">some text</any_tag>
</form>

Если я выполню это:

$("#f :hidden").remove();

все опции удалены. Вопрос в том, почему jquery удаляет параметры? и что является наиболее подходящим селектором для удаления только скрытых тегов? (хорошо или нет теги опций)

Вот тест .

Ответы [ 5 ]

11 голосов
/ 03 октября 2011

Вы можете просто добавить функциональность, которая уже должна быть там: P

$("#f :hidden:not(option)").remove();
8 голосов
/ 03 октября 2011

Ознакомьтесь с этим отчетом об ошибке jQuery: http://bugs.jquery.com/ticket/6293

Особое примечание:

Изменено 3 месяца назад, автор john
Статус изменен с открытого на закрытое
Разрешение установлено на wontfix

Учитывая, что каждый браузер кроме Firefox говорит, что это скрыто - кажется, что все наоборот. Тот Сказано, я не совсем уверен, что вы пытаетесь достичь с : скрытый /: видимый на элементах опции. Похоже, вы должны, вероятно, использовать: выбрано вместо. Не думаю, что это то, что мы собираюсь потратить много циклов на.

В качестве исправления для этого случая я бы воспользовался тем, что @Joseph уже предоставил:

$("#f :hidden:not(option)").remove();

.. который работает как задумано: http://jsfiddle.net/thirtydot/G4Qnr/4/

2 голосов
/ 03 октября 2011

Попробуйте:

$(":hidden").not("option")

0 голосов
/ 03 октября 2011

Не знаю, почему, но вы можете исправить ситуацию, используя селектор: not jQuery.

$("#f :not(option):hidden").remove();

http://jsfiddle.net/G4Qnr/2/

0 голосов
/ 03 октября 2011

В этом случае вы можете просто обернуть скрытые элементы в некоторый контейнер и использовать jQuery для удаления элементов из контейнера:

<div id="foo">
    <p style="display:none;">hello world</p>   
</div>

Затем в jQuery вы можете просто сделать это:

$("#foo :hidden").remove();

РЕДАКТИРОВАТЬ

Вот другой подход:

$("#f :hidden").not("option").remove();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...