Отображение иерархии "OPTION" в теге "SELECT"
Моя проблема связана с HTML и CSS. У меня есть структура типа иерархии, которую я хочу отображать внутри списка. Иерархия содержит страны, государства и города (это три уровня глубины).
Я хочу отобразить список внутри списка выбора, каждый тип элемента (страна, штат, город) должен быть выбран. Элементы должны иметь отступы как:
United States
- Hawaii
-- Kauai
- Washington
-- Seattle
-- Chelan
Проблема заключается в отступе. Я пытаюсь использовать либо margin-left, либо padding-left, чтобы отступать теги, которые выглядят корректными в FireFox, но не в IE7. Это пример сгенерированного списка выбора:
<select name="Something">
<option style="padding-left: 0">United States</option>
<option style="padding-left: 20px">Hawaii</option>
<option style="padding-left: 40px">Kauai</option>
<option style="padding-left: 20px">Washington</option>
<option style="padding-left: 40px">Seattle</option>
<option style="padding-left: 40px">Chelan</option>
</select>
Я хочу добиться согласованного отступов в браузерах без использования CSS-хаков.
Ответы
Ответ 1
deceze way намного лучше, и это была моя первая идея. В качестве альтернативы, если это не работает, вы можете использовать неразрывные пробелы в значении тега:
<select>
<option>select me</option>
<option> me indented</option>
<option> even more indentation</option>
</select>
Это далеко не красиво, но это может сработать для вас, если нет optgroup.
Ответ 2
Отрисовка элементов SELECT
в значительной степени зависит от браузера, вы очень мало влияете на их презентацию. Некоторые браузеры, очевидно, позволяют вам настраивать больше, чем другие, IE позволяет очень мало (вздох, кто бы взломал;)). Если вам нужны очень настраиваемые элементы SELECT
, вам нужно будет использовать JavaScript или воссоздать что-то, что ведет себя как SELECT
, но сделано из группы DIV
и флажков или чего-то большего.
Сказав это, я думаю, что вы ищете OPTGROUP
s:
<select>
<optgroup label="xxx">
<option value="xxxx">xxxx</option>
....
</optgroup>
<optgroup label="yyy">
...
</optgroup>
</select>
Каждый браузер будет отображать их по-разному, но они будут отображаться определенным образом так или иначе. Обратите внимание, что официально в HTML4 вы не можете вложить OPTGROUP
s.
Ответ 3
Просто ради посетителей, я чувствую, что должен поделиться этим решением, которое я разработал: http://jsfiddle.net/n9qpN/
Украсить параметры классом уровня
<select name="hierarchiacal">
<option class="level_1">United States</option>
<option class="level_2">Hawaii</option>
<option class="level_3">Kauai</option>
<option class="level_2">Washington</option>
<option class="level_3">Seattle</option>
<option class="level_3">Chelan</option>
</select>
Теперь мы можем использовать jQuery для переформатирования содержимого элемента select
$(document).ready(
function(){
$('.level_2').each(
function(){
$(this).text('----'+$(this).text());
}
);
$('.level_3').each(
function(){
$(this).text('---------'+$(this).text());
}
);
}
);
Это можно расширить до любого уровня
Ответ 4
Разве этот метод группировки не создает больше проблем, чем решает? Как пользователь, какой из них я должен выбрать? Есть ли какая-то польза для выбора чего-то более конкретного, чем страна?
Если проблема в том, что у вас есть только одно поле базы данных для их хранения, почему бы не иметь три отдельных блока выбора (делая 2 или 3 необязательных) и просто хранить наиболее конкретные?:
<select name="country">
<option>Choose a country</option>
<option>United States</option>
</select>
<select name="state">
<option>Choose a state</option>
<option>Hawaii</option>
</select>
<select name="city">
<option>Choose a city</option>
<option>Kauai</option>
</select>
Ответ 5
Попробуйте использовать & # 160;
<select name="Something">
<option>United States</option>
<option> Hawaii</option>
<option>  Kauai</option>
<option> Washington</option>
<option>  Seattle</option>
<option>  Chelan</option>
</select>
Ответ 6
Я смог выполнить это, используя символ Unicode NO-BREAK SPACE. http://www.fileformat.info/info/unicode/char/00a0/index.htm
Скопировать-вставить символ с этой страницы в код и вуаля:
https://jsfiddle.net/fwillerup/r9ch988h/
(
не работал у меня, потому что я использовал библиотеку для удобных блоков выбора, которые будут вводить их дословно.)