Я понял, что Chrome, похоже, не позволит мне спрятаться <option>
в <select>
. Firefox будет.
Мне нужно скрыть <option>
символы, соответствующие критериям поиска. В веб-инструментах Chrome я вижу, что они правильно настроены display: none;
моим JavaScript, но при <select>
нажатии на меню они отображаются.
Как я могу сделать так, чтобы эти <option>
символы, соответствующие моим критериям поиска, НЕ отображались при нажатии на меню? Спасибо!
javascript
jquery
css
dom
Джесси Аткинсон
источник
источник
Ответы:
Вы должны реализовать два метода сокрытия.
display: none
работает для FF, но не для Chrome или IE. Таким образом, второй метод оборачивания<option>
в<span>
сdisplay: none
. FF этого не сделает (технически недействительный HTML согласно спецификации), но Chrome и IE будут, и он скроет эту опцию.РЕДАКТИРОВАТЬ: О да, я уже реализовал это в jQuery:
РЕДАКТИРОВАТЬ 2: Вот как вы могли бы использовать эту функцию:
РЕДАКТИРОВАТЬ 3: добавлена дополнительная проверка, предложенная @ user1521986
источник
<select>
(с использованием jQuery.val()
) вернетсяnull
. Я только что протестировал это в Chrome 29, так что остерегайтесь гуглеров!Для HTML5 вы можете использовать атрибут «скрытый».
Это не поддерживается IE <11. Но если вам нужно скрыть только несколько элементов, возможно, было бы лучше просто установить атрибут hidden в сочетании с disabled по сравнению с добавлением / удалением элементов или созданием семантически некорректных конструкций.
Ссылка .
источник
disabled
так, чтобы те браузеры, которые не поддерживают глобальныйhidden
атрибут HTML5 , имели визуальную индикацию для пользователя.<option hidden disabled>
, поэтому он скрывается во всех хороших браузерах и отключает его в других.Я бы посоветовал вам не использовать решения, использующие
<span>
оболочку, потому что это недопустимый HTML, что может вызвать проблемы в будущем. Я думаю, что предпочтительное решение - удалить все параметры, которые вы хотите скрыть, и восстановить их по мере необходимости. Используя jQuery, вам понадобятся только эти 3 функции:Первая функция сохранит исходное содержимое выбора . На всякий случай вы можете вызвать эту функцию при загрузке страницы.
Следующая функция вызывает указанную выше функцию, чтобы убедиться, что исходное содержимое было сохранено, а затем просто удаляет параметры из модели DOM.
Последнюю функцию можно использовать всякий раз, когда вы хотите «сбросить» все исходные параметры.
Обратите внимание, что все эти функции ожидают, что вы передадите элементы jQuery. Например:
Вот рабочий пример: http://jsfiddle.net/9CYjy/23/
источник
var value=$select.val(); $select.html(ogHTML); $select.val(value);
чтобы выбранное значение оставалось выбранным даже после восстановления.Ответ Райана П. следует изменить на:
В противном случае он будет заключен в слишком много тегов
источник
<select>
должен содержать только элементы, поддерживающие скрипт,<option>
or<optgroup>
or. Поэтому вам следует избегать использования недопустимых<span>
оболочек.Функция toggleOption не идеальна и внесла неприятные ошибки в мое приложение. jQuery запутается с .val () и .arraySerialize (). Попробуйте выбрать варианты 4 и 5, чтобы понять, что я имею в виду:
источник
Таким образом, выбрать входы сложно. Что насчет его отключения, это будет работать в кросс-браузере:
Это отключит все остальные
<option>
элементы, но вы можете выбрать, какой хотите.Вот демонстрация: http://jsfiddle.net/jYWrH/
Примечание. Если вы хотите удалить отключенное свойство элемента, вы можете использовать его
.removeProp('disabled')
.Обновить
Вы можете сохранить
<option>
элементы, которые хотите скрыть, в скрытом элементе выбора:Затем вы можете добавить
<option>
элементы обратно в исходный элемент выбора:В этих двух примерах ожидается, что видимый элемент выбора имеет идентификатор,
visible
а скрытый элемент выбора имеет идентификаторhidden
.Вот демонстрация: http://jsfiddle.net/jYWrH/1/
Обратите внимание, что
.on()
это новинка в jQuery 1.7, и использование этого ответа такое же, как.bind()
: http://api.jquery.com/onисточник
Простой ответ: нельзя. Элементы формы имеют очень ограниченные возможности стилизации.
Лучшей альтернативой было бы установить
disabled=true
эту опцию (и, возможно, серый цвет, поскольку только IE делает это автоматически), и это сделает эту опцию неактивной.С другой стороны , если вы можете полностью удалить
option
элемент.источник
источник
Поскольку вы уже используете JS, вы можете создать скрытый элемент SELECT на странице и для каждого элемента, который вы пытаетесь скрыть в этом списке, переместить его в скрытый список. Таким образом, их можно легко восстановить.
Я не знаю, как сделать это на чистом CSS ... Я бы подумал, что уловка display: none не сработает.
источник
!!! ВНИМАНИЕ !!!
Замени второй «ЕСЛИ» на «ПОКА» или не работает!
источник
Вы должны удалить их из
<select>
использования JavaScript. Это единственный гарантированный способ заставить их уйти.источник
$('options').remove();
этот, кажется, работает для меня в хроме
источник
Поздно в игре, но большинство из них кажутся довольно сложными.
Вот как я это сделал:
разметка select-1:
разметка select-2:
источник