Нубский вопрос:
К примеру, у меня есть ячейка таблицы: . Если из скрипта попытаться узнать цвет ее фона (m1n1.style.backgroundColor), то Opera и Internet Explorer выдаст строку "#ff0000" (что меня вполне устраивает), а вот Mozilla выдаст "rgb(255,0,0)". Есть ли какой-нибудь способ заставить Мозиллу выдать цвет именно в шестнадцатиричном виде? Очень нужно. Заранее спасибо.
Нет врядли получится...
Но можно написать функцию, которая будет проверять если НЕ в шеснадцатиричном формате, то переводить в оный!
Такая функция реализована в библиотеке script.aculo.us effects.js (parseColor()). effects.js использует, в свою очередь, библиотеку prototype.js. Ради одной только функции, конечно, нет смысла подключать две библиотеки. Поэтому я выбрал то, что тебе нужно, немного видоизменив:
Number.prototype.toColorPart = function() { var digits = this.toString(16); if (this < 16) return \'0\' + digits; return digits; }
// converts rgb() and #xxx to #xxxxxx format, // returns self (or first argument) if not convertable String.prototype.parseColor = function() { var color = \'#\'; if(this.slice(0,4) == \'rgb(\') { var cols = this.slice(4,this.length-1).split(\',\'); var i=0; do { color += parseInt(cols).toColorPart() } while (++i<3); } else { if(this.slice(0,1) == \'#\') { if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase(); if(this.length==7) color = this.toLowerCase(); } } return(color.length==7 ? color : (arguments[0] || this)); }
Теперь document.getElementById("m1n1").style.backgroundColor.parseColor() вернет строку с цветом в формате #xxxxxx
Грамотно..
Да нет, я спрашивал именно о встроенной функции преобразования. Но все равно большое спасибо.
|