Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как работать с css свойствами? (https://javascript.ru/forum/misc/32382-kak-rabotat-s-css-svojjstvami.html)

Аня C 14.10.2012 18:24

Как работать с css свойствами?
 
У меня есть див, у дива есть класс, у класса есть свойства. Хочу, чтобы по нажатию на див свойство color класса перезагружалось. То есть был у меня, попустим, белый див, по нажатию этот конкретный див становится чёрным. А не белый див - менял цвет, допустим, на зелёный. А остальные дивы этого же класса оставались как есть. Всё бы ничего - дивы прекрасно меняют цвет. Да только изначально у дивов нет свойства style.background, хотя при присвоении белый див культурно... зеленеет. Потому что изначально белый див белым не является, он вообще бесцветный. Вот код:
function chageColor(){tmp=document.getElementById("div1");
    tmp.style.background =  (tmp.style.background == "white") ? "black" : "green";
}

<div class="someClass" id="div1" onclick="changeColor()"></div>'

css класса someClass {background: white;}
Собственно вопрос - как из чистого js работать с css свойствами, чтобы они вели себя ожидаемым образом? Если в стилях свойство есть, то чтобы оно выбиралось в переменную, а если нет - то на нет и суда нет? Плюс, чтобы и в обратную строну можно было - установить либо каким-либо set-ом, либо просто присвоить?

Upd: задаю в другой функции для div1 - style.background, свойство есть. но не совсем понятно, почему если я его (style.background="#cff"; ) сравниваю с тем же значением (tmp.style.background=="#cff"; ) в chageColor() он даёт false. alert выдаёт цвет в формате rgb(204,255,255) Какой функцией преобразовывать строку, чтобы сравнение давало нужный результат?

Nekromancer 14.10.2012 18:33

http://javascript.ru/blog/Andrej-Par...cheniya-stilya

Hoshinokoe 14.10.2012 18:42

Аня C,

Лучше всего делать проверку не на определенное свойство у стиля, а на класс. Т.е. :

<div class="someClass white" id="div1" onclick="changeColor()"></div>
<div class="someClass green" id="div2" onclick="changeColor()"></div>
<div class="someClass black" id="div3" onclick="changeColor()"></div>
if(element.className.indexOf('white') != -1) { // присваем другой класс}

А в css указываем необходимые свойства:
.white
{
background-color: white !important;
}

Аня C 14.10.2012 18:50

Nekromancer,
Спасибо, помогли понять результаты тестов.
Hoshinokoe,
Спасибо за элегантное решение.

nerv_ 14.10.2012 21:35

Hoshinokoe,
<div class="someClass black-and-white" id="div3" onclick="changeColor()"></div>

да, и
alert( ~'text lalala 12 lalala text'.indexOf( '12' ) );

Nekromancer 14.10.2012 21:37

nerv_,
:)

classList

melky 14.10.2012 22:12

Цитата:

Сообщение от Nekromancer
classList

только что хотел сказать про него :)

nerv_ 14.10.2012 22:45

Nekromancer, melky, вы IE совсем похоронили? )

melky 14.10.2012 22:51

Цитата:

Сообщение от nerv_
Nekromancer, melky, вы IE совсем похоронили? )

я уже вместо креста на его могилке поставил туда буквы POLYFILL.

Nekromancer 14.10.2012 23:06

nerv_,
я например совсем похоронил 6 и 7. В восьмом через прототипы полифилы действительно замечательно работают. Только у нас в проекте классы вообще не используются, по этому я не писал его :)

nerv_ 15.10.2012 23:43

пожалуйста, осторожнее используйте новые термины в разговорах с нубами :D Что такое
Цитата:

Сообщение от melky
POLYFILL

?

Nekromancer 15.10.2012 23:48

nerv_,
Это ты себя нубом назвал? Ну polyfill он же shim/shiv есть как правило скрипт, который эмулмрует работу той или иной фичи в браузерах, которые ее не поддерживают.

nerv_ 16.10.2012 02:18

Цитата:

Сообщение от Nekromancer
Это ты себя нубом назвал?

аха )
Цитата:

Сообщение от Nekromancer
Ну polyfill он же shim/shiv есть как правило скрипт, который эмулмрует работу той или иной фичи в браузерах, которые ее не поддерживают.

спасибо, буду знать :) Уже использую es5-shim

Nekromancer 16.10.2012 02:48

nerv_,
Да, мы тоже используем :)


Часовой пояс GMT +3, время: 08:55.