Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.06.2012, 14:03
Новичок на форуме
Отправить личное сообщение для ganzalik228 Посмотреть профиль Найти все сообщения от ganzalik228
 
Регистрация: 30.01.2012
Сообщений: 5

Объединение 2 методов(.style & .getcomputedstyle)
Стоит такая вот задача: есть некая форма (регистрации), в ней куча различный элементов, нужно проверить цвет фона у ВСЕХ элементов, причём у половины (какие именно элементы не знаю) цвет задан в самом html через <style>, а у другой половины через css. 1 метод .style.background, как я понял, берёт цвет у элементов, заданных через <style>, .getcomputedstyle берёт цвет у css. Сам вопрос: как объединить эти два метода? Чтобы все элементы проверялись, независимо от того, в где им задан цвет. (если поможет: делаю всё в Selenium IDE через storeEval). И ещё очень немало важный момент!: результат цвета должен быть в rrggbb (пример: #cce6ff)

мой скрипт для проверки элементов, заданных через <style>:
var form =window.document.forms[0];
elements = form.elements;
for(var i = 0, len = elements.length; i < len; i ++) {
color = elements[i].style.backgroundColor;}

скрипт для проверки элементов, заданных через css (с конвертером цвета в нужный формат):
var form =window.document.forms[0];
elements = form.elements;
for(var i = 0, len = elements.length; i < len; i ++){
var color = window.document.defaultView.getComputedStyle(eleme nts[i]).getPropertyValue('background-color');
var colorArr = color.replace(/[\\rrgb\\(\\)]/g, '').split(',');
var hexString = '#' + parseInt(colorArr[0]).toString(16) + parseInt(colorArr[1]).toString(16) + parseInt(colorArr[2]).toString(16);

Как объединить их?
Ответить с цитированием
  #2 (permalink)  
Старый 05.06.2012, 14:23
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

function style( elem ) {
    if ( elem.ownerDocument && elem.ownerDocument.defaultView ) {
        return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
    } else if ( elem.currentStyle ) {
        return elem.currentStyle;
    }
    return elem.style;
}

function toRGB( color ) {

    var result;

    // rgb(num,num,num)
    if ( result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec( color ) ) {

        result = [ parseInt( result[ 1 ] ), parseInt( result[ 2 ] ), parseInt( result[ 3 ] ) ];
    // rgb(num%,num%,num%)
    } else if ( result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec( color ) ) {

        result = [ parseFloat( result[ 1 ] ) * 2.55, parseFloat( result[ 2 ] ) * 2.55, parseFloat( result[ 3 ] ) * 2.55 ];
    // #a0b1c2
    } else if ( result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec( color ) ) {

        result = [ parseInt( result[ 1 ], 16 ), parseInt( result[ 2 ], 16 ), parseInt( result[ 3 ], 16 ) ];
    // #fff
    } else if ( result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec( color ) ) {

        result = [ parseInt( result[ 1 ] + result[ 1 ], 16 ), parseInt( result[ 2 ] + result[ 2 ], 16 ), parseInt( result[ 3 ] + result[ 3 ], 16 ) ];

    } else { // ничего не совпало
        // скорее всего цвет указан словесным названием типа: red, blue и т.д.
        return color;
    }

    return "#" + result[ 0 ].toString( 16 ) + result[ 1 ].toString( 16 ) + result[ 2 ].toString( 16 );
}


var form =window.document.forms[0,
    elements = form.elements; 

for( var i = 0, len = elements.length; i < len; i++ ) {
    alert( toRGB( style( elements[i] ).backgroundColor ) );
}
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 05.06.2012 в 14:26.
Ответить с цитированием
  #3 (permalink)  
Старый 05.06.2012, 19:34
Новичок на форуме
Отправить личное сообщение для ganzalik228 Посмотреть профиль Найти все сообщения от ganzalik228
 
Регистрация: 30.01.2012
Сообщений: 5

спасибо. Совсем по-другому, хотел именно мои методы (просто они к selenium ide идеально подходят), но и на том спасибо, разберусь с Вашим, попробую по аналогии свой объединить
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединение нескольких блоков в аккордеон robertkein jQuery 0 07.05.2012 19:37
Объединение функций Xant1k Общие вопросы Javascript 1 13.04.2012 02:33
Объединение двух событий ASerputko Общие вопросы Javascript 7 12.01.2011 15:32
Объединение подобных функций mrMAG Элементы интерфейса 4 20.02.2010 15:35
Объединение в цикл baal1988 Общие вопросы Javascript 7 27.08.2008 09:21