Нет понятия о чем я спрашиваю.
Например, цена имеет закономерность - каждая последующая больше предыдущей на 200 руб., и первая равна 200 руб. Цвета в зависимости от цены распределены так: 200 руб. - зеленый, 400 руб. - синий, 600 руб. - красный. В этом случае городить огород с классами с прицепом идентификатора нет необходимости (такой необходимости в вашем случае вообще нет, каким бы там образом не определялся цвет), и каких-то условий для вывода тоже не надо. Определены классы как: color_1 имеющем зеленый цвет, и соответственно другие классы. Все они сразу прописываются в CSS, а при выводе элементов на страницу указывается соответствующий цене класс, как: class="color_' .<?=$row['price']/200?>. '" Либо цвет определяется номером ряда мест, и если между номером места и рядом тоже есть некая закономерность, то также можно автоматом определять класс. Вот о чем я спрашивал - какая зависимость межу цветом/местом/ценой. Ну не сидит же некая Маня, которая сегодня месту 100 назначила розовый цвет, а завтра будет не в настроении и выставит черный. Есть же наверное условия определенные, и цветов у вас не тысячи, и прописывать, причем постоянно, огромные портянки селекторов "уродуемых номерами мест" при выводе, ну это надо писать код "в лоб", чтобы до такого додуматься. Если иметь множество таких уродливых классов, а затем установить на них обработчик так как вам было показано, а так и придется, то нужно иметь ввиду, что сперва будет браться строка имени класса всех элементов на странице, и затем, путем ее разбора, производится ее сравнение с указанным селектором, потому как селектор задан по условию как часть имени класса. А если еще и оправдывать таковой подход тем, что у пользователей теперь компьютеры мощные, переварят, то это вообще ни в какие ворота. И можно только представить себе CSS портянку при таком способе. Понятно, новичок, но не так страшен черт, как его малютки, все мы рождаемся голенькими. И собственно, если hover определен для всех, а это же изменение нужно и по щелчку, то и задача решена - как выбрать элементы, было показано, а что не работает, ну обработчик не на кого ставить (элементы не загружены, говорил об этом, но все осталось без комментариев, так что неизвестность), либо иной баг... Но не так и сложно "навести порядок" в этом бардаке. Далее простой пример, описывающий все. Так как на вопросы я ответов не получаю, то просто запускайте пример, думайте, решайте сами. Пример с описанием. Допустим, есть места в зале, и пусть в зависимости от чего-то (так как и у вас, от чего не известно), администратор "раскрашивает" их цветами. Цвет определяется посредством выбора в цветовом круге и записывается в таблицу цветов как его десятичное значение в поле типа INT (в примере имя поля таблицы color_value). При выводе CSS, это значение приводится к виду #XXXXXX. Каждому значению определенного цвета определяется и его имя, которое будет служить классом и сохраняемое в таблице цветов в поле color_name. Каждая такая запись записывается в таблицу под уникальным идентификатором, который позволяет редактировать цвет. Кроме этого эта таблица может содержать значения как флаги определяющие некие индивидуальные условия или действия на клиенте, которые в свою очередь могут быть динамически добавляемые или заранее определенные, а флаг связывает определенный обработчик с цветом. В примере этого нет, есть как пример использования такого цвета - бонус, ну пусть типа рядом с местом таким дама в неглиже подливающая виски в бокал. Данная таблица цветов определяет все цвета, включая цвет по умолчанию, цвет по наведению и т.п., если все цвета могут редактироваться. Как уже говорилось, РНР не выводит постоянно эти цвета в блок стилей на странице, этого не надо, из этих цветов формируется подключаемый CSS файл, который изменяется только тогда, когда происходит добавление/изменение цвета в административном разделе. В простейшем случае, при подключении этого файла указывает и GET параметр, как время последнего изменения файла. Поэтому браузер и будет его загружать только тогда, когда добавлен/изменен цвет, иначе он будет использовать ранее кешированный CSS. Это всё классы управляющие стилями элементов (цветом), а селектор, по которому можно выбрать все элементы (места) к цвету отношения не имеет, он описывает общие для всех стили. В примере это класс seats_hall. Таблица описывающая объекты (места) не содержит цветов, по умолчанию это поле таблицы (color) имеет значение NULL. Если же месту цвет определен, то в это поле пишется идентификатор соответствующего цвета из таблицы цветов. При выводе объектов на страницу по этому идентификатору вложенным запросом из таблицы цветов получается имя цвета (значение поля color_name). Эти значения (NULL или color_name) добавляются как имя класса элементу, то есть элементы имеют составной класс - один из них, это общий селектор, а второй (если не NULL, иначе цвет по умолчанию) определяет цвет элемента установленный администратором. Это и все по сути, что требуется для того, чтобы иметь цветовую схему, управлять ею и определять ее элементам на странице. Огромных CSS портянок методично перечисляющих все элементы использующие ее совсем не требуется. Пример будет работать на РНР не ниже версии 5.4. <? //преобразование десятичного значения цвета в HEX значение function dec_to_hex($d) { $d = base_convert($d, 10, 16); return '#' . str_repeat(0, 6 - strlen($d)) . $d; } //массив наименований стилей цвета и их значений //как имитация полученного из базы, редактируемой таблицы цветов //где ключ - имя цвета из поля color_name и определяющего имя класса, //а значение - значение цвета из поля color_value //только в примере они выводятся постоянно //в реальности, это должен быть подключаемый файл, изменяемый при добавлении/редактировании цвета $color = [ 'color_default' => 10066329, //значение по умолчанию - id в таблице базы = 1 'color_hover' => 12235289, //значение по наведению - id в таблице базы = 2 'color_2' => 16711680, //красный - id в таблице базы = 3 'color_3' => 65280, //зеленый - id в таблице базы = 4 'color_4' => 255 //синий - id в таблице базы = 5 ]; //класс цвета для обработки по условию //который в реальности может определятся через управление //каким либо флагом $bonus = 'color_2'; //это имитация объектов полученных из базы $objects = [ ['id'=> 23, 'text'=> 'Text 1', 'price'=> 340, 'color'=> null], ['id'=> 12, 'text'=> 'Text 2', 'price'=> 400, 'color'=> 'color_2'], ['id'=> 22, 'text'=> 'Text 3', 'price'=> 300, 'color'=> null], ['id'=> 33, 'text'=> 'Text 4', 'price'=> 400, 'color'=> 'color_3'], ['id'=> 34, 'text'=> 'Text 5', 'price'=> 500, 'color'=> 'color_2'], ['id'=> 56, 'text'=> 'Text 6', 'price'=> 420, 'color'=> 'color_4'] ]; ?> <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <style> .seats_hall { font: 14px Tahoma, sans-serif; color: <?=dec_to_hex($color['color_default'])?>; } .seats_hall:hover { color: <?=dec_to_hex($color['color_hover'])?>; } <? //определенные стили цвета в зависимости от цены/ряда foreach(array_slice($color, 2) as $k=>$v) echo '.' . $k . '{color:' . dec_to_hex($v) . '}' ?> </style> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script> var color_ctrl = "<?=$bonus?>"; $(function() { //обработчик на все объекты $('.seats_hall').click(function() { //с индивидуальной обработкой элементов с классом color_2 alert($(this).hasClass(color_ctrl) ? 'Bonus color' : 'Work color') }); //обработчик на указанный цвет $('.'+color_ctrl).mouseenter(function() { alert('Bonus color') }) }); </script> </head> <body> <? //вывод объектов echo implode('<br>', array_map(function($v) { return '<span id="obj-' .$v['id']. '" class="seats_hall '.$v['color'].'">' . $v['text'] . ', $' . $v['price'] . '</span>'; }, $objects)) ?> </body> </html> |
Часовой пояс GMT +3, время: 18:52. |