Объединение 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); Как объединить их? |
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 ) ); } |
спасибо. Совсем по-другому, хотел именно мои методы (просто они к selenium ide идеально подходят), но и на том спасибо, разберусь с Вашим, попробую по аналогии свой объединить
|
Часовой пояс GMT +3, время: 18:45. |