Отображение иерархии "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-хаков.
7 ответов
deceze способ намного лучше и был моей первой идеей. В качестве альтернативы, если это не работает, вы можете использовать неразрывные пробелы в значении тега:
<select>
<option>select me</option>
<option> me indented</option>
<option> even more indentation</option>
</select>
это далеко не красиво, но это может сработать для вас, если optgroup этого не делает.
рендеринг SELECT
элементы, в основном зависит от браузера, у вас очень мало влияния на их представления. Некоторые браузеры, очевидно, позволяют вам больше настройки, чем другие, IE позволяет очень мало (вздох, кто бы мог подумать ;)). Если вам нужно очень таможней SELECT
элементы, вам нужно будет использовать JavaScript или воссоздать что-то, что ведет себя как SELECT
но куча DIV
s и флажки или что-то в этом роде расширять.
сказав это, я думаю, что вы ищете OPTGROUP
s:
<select>
<optgroup label="xxx">
<option value="xxxx">xxxx</option>
....
</optgroup>
<optgroup label="yyy">
...
</optgroup>
</select>
каждый браузер будет отображать их по-разному, но они будут отображаться в отличительной манере так или иначе. Обратите внимание, что официально в HTML4 вы не можете вложить OPTGROUP
s.
просто ради посетителей, я чувствую, что должен поделиться этим решением, которое я разработал: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());
}
);
}
);
Это может быть расширено до любого уровня
разве этот метод группировки не создает больше проблем, чем решает? Как пользователь, который из них я должен выбрать? Есть ли какая-то польза в выборе чего-то более конкретного, чем страна?
Если проблема в том, что у вас есть только одно поле базы данных для их хранения, почему бы не иметь три отдельных поля выбора (делая 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>
попробуйте использовать
<select name="Something">
<option>United States</option>
<option> Hawaii</option>
<option>  Kauai</option>
<option> Washington</option>
<option>  Seattle</option>
<option>  Chelan</option>
</select>
добавление неразрывного пространства ( ) не сработало для меня.
Я добавил следующее:
String.fromCharCode(8194);
я смог выполнить это, используя символ unicode без перерыва. http://www.fileformat.info/info/unicode/char/00a0/index.htm
копировать-вставить символ с этой страницы в код и вуаля: https://jsfiddle.net/fwillerup/r9ch988h/
(
не работал для меня, потому что я использовал библиотеку для причудливых ящиков выбора, которые будут вводить их дословно.)