Великие проблемы с background-image.
Я хочу сделать перевод CSS свойств в массив и обратно.
Пример: <div id="block" style="background-image:url(),linear-gradient()"></div> Я знаю как получить свойства CSS, но не знаю как разбить их на массивы? |
Неужели прошло 100 лет, а люди так и не научились при помощи JS мастерски приручать CSS. :o
|
>Я не разбираюсь в RegExp
Это печально. И таки да, непонятно, что за массивы то нужны? |
А зачем тут регэксп?
<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>
|
писать 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>
|
melky,
Да вы ВСЕ не так поняли! http://javascript.ru/forum/misc/2249...svojjstvo.html Речь идет о Multiple background |
Цитата:
|
ааа..
я сделал это через 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. |
На вскидку, если упростить, как-то так:
/.+?(?=, 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>
Цитата:
<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>
|
Блин! Я говорю нужна библиотека!
|
Что вы таки под этим опять подразумеваете?
|
Ну проблема о5 - он на массив не разбирает! Мне просто нужен особый RegExp для split и все!
Почему помочm не можете? Мне дано у элемента:
#box {
background-image:url(image.png), linear-gradient(bottom, rgb(76,47,92) 41%, rgb(107,76,120) 71%, rgb(140,107,156) 86%);
}
Нужно чтобы получилось: array[0] = "url(image.png)"; array[1] = "linear-gradient(bottom, rgb(76,47,92) 41%, rgb(107,76,120) 71%, rgb(140,107,156) 86%)"; Я только знаю, что при помощи join можно начать обратный процесс:
background = array.join(",");
|
Разбирает:
<div id="block" style="background:url(clock.png),-moz-linear-gradient(bottom, #F7E82C 49%, #FFFF47 75%, #FFFF64 88%)"></div>
<script>
function st(prop){
return typeof prop == 'string' ? prop.match(/[^, ].+?(?=, url|, -moz-linear-gradient|$)/g) : prop.join(', ')
}
a=document.getElementById("block").style;
alert(st(a.background).join('\n\n'))
b=['url(no.png)'];
a.background=st(b);
alert(st(a.background).join('\n\n'))
</script>
|
Aetae,
Я все равно не понимаю - у тебя вообще не массив (точнее не объект)... Кароче - есть что-нибудь более понятное? |
Цитата:
|
Блджад. *facepalm*
<div id="block" style="background:url(clock.png),-moz-linear-gradient(bottom, #F7E82C 49%, #FFFF47 75%, #FFFF64 88%)"></div>
<script>
function st(prop){
return typeof prop == 'string' ? prop.match(/[^, ].+?(?=, url|, -moz-linear-gradient|$)/g) : prop.join(', ')
}
backgroundImage = document.getElementById("block").style.backgroundImage;
array=st(backgroundImage);
alert(array[0])
alert(array[1])
</script>
Так понятее? Цитата:
|
Все - понятно! Но можно ли найти что-то общее:
url -moz-linear-gradient В RegExp. |
Можно, но включить все варианты вручную - надежнее.
Как-то так:
/[^, ].+?(?=, [a-z\-]{4,}|$)/g
|
удалил коммент
|
Хех, я какбэ и так универсальную функцию сделал:
global.splitCssProp(prop){
return typeof prop == 'string' ? prop.match(/[^, ].+?(?=, [a-z\-]{4,}|$)/g) : *!*prop.join(', ')*/!*;
}
Те, если аргументом идёт массив, то она возвращает строку.) Совсем вы, твоварисчъ, бездумно копируете. |
Простите - не так написал...
У меня часто бывает так. |
Ладно - спс. Если есть получше - пишите!
Я пересел на Mozilla Firefox 10.0 (раньше на хроме сидел). Все таки хром (Dev сборка) стала нестабильно отображать страницы... |
Остался один вопрос: на кой оно нужно было?)
|
Я скажу зачем оно нужно было:
Дело в том, что мне трудно работать с multiple background. Есть проблемы с split. При помощи split можно только background-size. А если нужно background-image то тут нужно что-то помощнее! |
Можно ли аналогичным способом, как у тебя, делить пробелы?
Например: solid 1px rgb(0, 0, 0); |
Можно:
d='solid 1px rgb(0, 0, 0)';
alert(
d.match( /[^ ].+?[^,](?= |$)/g )
.join('\n\n')
)
Но по-моему это надмозги. В данном случе вообще нативные border-style/size итд лучше юзать. |
Aetae,
Заключительный вопрос! Возможно ли разделить background-size на две части? т.е. width и height. |
да. можно. руками.
Цитата:
лаже, если вскормить строку. |
Дык на работе у меня ток фф, так что хз. Да -moz-linear-gradient какбе говорит нам.)
Приведи ту строку, что хром выдаёт .style.backgroundImage . |
я же сказал, если вскормить строку.
свойство он понятное дело не поймет ) ![]() |
Все работает нормально.(на то оно и regexp)
Не работать могло из-за того, что в примере из этой темы после запятой нет пробела. Браузер пробел ставит, потому всё гуд. Если нужно парсиь ещё и неформатированные строки, то тут уж разрастется regexp естесно, но это уже не моё дело.
prop="url(clock.png), -moz-linear-gradient(bottom, #F7E82C 49%, #FFFF47 75%, #FFFF64 88%)"
alert(prop.match(/[^, ].+?(?=, url|, -moz-linear-gradient|$)/g).join('\n\n'))
Да и вообще в хроме всё также отлично работет:
<div id="block" style="
width:800px;height:132px;
background-image:url(http://javascript.ru/forum/images/smilies/sad.gif),
-webkit-gradient(linear,center bottom,center top, color-stop(49%, #F7E82C), color-stop(75%, #FFFF47), color-stop(88%, #FFFF64));
background-image:url(http://javascript.ru/forum/images/smilies/sad.gif),
-moz-linear-gradient(bottom, #F7E82C 49%, #FFFF47 75%, #FFFF64 88%);
"></div>
<script>
function st(prop){
return typeof prop == 'string' ? prop.match(/[^, ].+?(?=, url|, linear-gradient|, -moz-linear-gradient|, -webkit-gradient|$)/g) : prop.join(', ');
}
a=document.getElementById("block").style;
alert(st(a.backgroundImage).join('\n\n'))
</script>
Запарил мозги бедному человеку.:( |
точно! я забыл про это
ответ можно было написать в 1 строчку :) Цитата:
|
| Часовой пояс GMT +3, время: 06:31. |