Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.10.2011, 10:43
Профессор
Посмотреть профиль Найти все сообщения от Solovei95
 
Регистрация: 15.03.2011
Сообщений: 353

Великие проблемы с background-image.
Я хочу сделать перевод CSS свойств в массив и обратно.
Пример: <div id="block" style="background-image:url(),linear-gradient()"></div>
Я знаю как получить свойства CSS, но не знаю как разбить их на массивы?

Последний раз редактировалось Solovei95, 22.10.2011 в 10:55.
Ответить с цитированием
  #2 (permalink)  
Старый 22.10.2011, 10:45
Профессор
Посмотреть профиль Найти все сообщения от Solovei95
 
Регистрация: 15.03.2011
Сообщений: 353

Неужели прошло 100 лет, а люди так и не научились при помощи JS мастерски приручать CSS. :o
Ответить с цитированием
  #3 (permalink)  
Старый 22.10.2011, 11:12
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

>Я не разбираюсь в RegExp
Это печально.

И таки да, непонятно, что за массивы то нужны?
__________________
29375, 35

Последний раз редактировалось Aetae, 22.10.2011 в 11:28.
Ответить с цитированием
  #4 (permalink)  
Старый 22.10.2011, 11:16
Профессор
Отправить личное сообщение для Триви Посмотреть профиль Найти все сообщения от Триви
 
Регистрация: 23.04.2010
Сообщений: 354

А зачем тут регэксп?

<div id="block" style="width:300px; display: block"></div>

 <script>
 var st = document.getElementById('block').getAttribute('STYLE');
  
 var arr = st.split(';'); // в массив
 alert(arr);
  
 var str = arr.join(';');  // обратно
 alert(str);
 </script>
Ответить с цитированием
  #5 (permalink)  
Старый 22.10.2011, 11:35
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

писать css-свойства через запятую ?

не маразмируйте. разделяйте правила через ;


Триви,
var st = document.getElementById('block').getAttribute('STYLE');

equals to
<div id="block" style="width:300px; display: block"></div>
<script>alert(document.getElementById('block').*!*style.cssText*/!*)</script>
Ответить с цитированием
  #6 (permalink)  
Старый 22.10.2011, 11:36
Профессор
Посмотреть профиль Найти все сообщения от Solovei95
 
Регистрация: 15.03.2011
Сообщений: 353

melky,
Да вы ВСЕ не так поняли!
Как разбить на массив CSS свойство?
Речь идет о Multiple background
Ответить с цитированием
  #7 (permalink)  
Старый 22.10.2011, 11:41
Профессор
Отправить личное сообщение для Триви Посмотреть профиль Найти все сообщения от Триви
 
Регистрация: 23.04.2010
Сообщений: 354

Сообщение от melky Посмотреть сообщение
Триви,
var st = document.getElementById('block').getAttribute('STYLE');

equals to
<div id="block" style="width:300px; display: block"></div>
<script>alert(document.getElementById('block').*!*style.cssText*/!*)</script>
Ага, вылетело из головы это свойство
Ответить с цитированием
  #8 (permalink)  
Старый 22.10.2011, 12:28
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

ааа..

я сделал это через match
написал такую регу
Код:
 /[\w\-]+\([^\)]+\)/g
соответствует или буквам, или дефису(минусу), которых много, и после которых идёт открывающая круглая скобка, в которой находится всё, кроме закрывающей круглой скобки. после этого находится закрывающая круглая скобка.

пример :
// разобрали.
reg = /[\w\-]+\([^\)]+\)/g;

a=document.createElement('div');a.style.cssText='background:url("images/bar.png"), -webkit-linear-gradient(left,red,orange,blue)';

alert(a.style.background); // добавились запятые между цветами в градиенте !!

*!*
var array = a.style.background.match(reg); // это почти массив.
*/!*


alert( *!*[].slice.call(array)*/!*/*а теперь это массив*/.join('\n---------\n') )


ЗЫ долго отвечал) надо было реги повторить. забываются быстро


UPd но есть и минусы

рега не хавает такое
-moz-linear-gradient(bottom, rgb(247,232,44) 49%, rgb(255,255,71) 75%, rgb(255,255,100) 88%)

так что вам придётся убирать цвета в виде rgb(247,232,44) и преобразовывать их в hex.

Последний раз редактировалось melky, 22.10.2011 в 12:38.
Ответить с цитированием
  #9 (permalink)  
Старый 22.10.2011, 12:52
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

На вскидку, если упростить, как-то так:
/.+?(?=, url|, -moz-linear-gradient|$)/g


<div id="block" style="background:url(clock.png),-moz-linear-gradient(bottom, rgb(247,232,44) 49%, rgb(255,255,71) 75%, rgb(255,255,100) 88%)"></div>
<script>
alert(document.getElementById("block").style.background.match(/.+?(?=, url|, -moz-linear-gradient|$)/g).join('\n'))
</script>


Сообщение от melky Посмотреть сообщение
так что вам придётся убирать цвета в виде rgb(247,232,44) и преобразовывать их в hex.
Хы, хы, браузеру на твои желания пофиг.
<div id="block" style="background:url(clock.png),-moz-linear-gradient(bottom, #F7E82C 49%, #FFFF47 75%, #FFFF64 88%)"></div>
<script>
alert(document.getElementById("block").style.background)
</script>
__________________
29375, 35

Последний раз редактировалось Aetae, 22.10.2011 в 13:11.
Ответить с цитированием
  #10 (permalink)  
Старый 22.10.2011, 13:15
Профессор
Посмотреть профиль Найти все сообщения от Solovei95
 
Регистрация: 15.03.2011
Сообщений: 353

Блин! Я говорю нужна библиотека!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
dom и regexp KOLANICH Events/DOM/Window 6 16.01.2010 22:51
evalScripts без regexp и eval Diem Events/DOM/Window 1 30.07.2009 17:34
мааленький вопрос по Regexp:) mirniy Общие вопросы Javascript 1 22.01.2009 20:47
RegExp & Mozilla (быстродействие) tau Общие вопросы Javascript 9 24.11.2008 16:35
RegExp и unicode Yury900 Общие вопросы Javascript 7 13.05.2008 00:19