2013-04-05 19 views
0

我有點棘手。我試圖改變分配給樣式的字符串的一部分。我想用js將兩個漸變子句中的50%更改爲不同的值,而不必在js中創建整個字符串。如何更改屬性值的一部分

是否有某種正則表達式與setAttribute聯合使用?

<a class="item" id="bob" style=" 
background-image:-moz-linear-gradient(0deg, rgb(0, 255, 0) 0%, rgb(250, 250, 5) 50%, rgb(252, 3, 3) 100%); 
background-image:-webkit-linear-gradient(0deg, rgb(0, 255, 0) 0%, rgb(250, 250, 5) 50%, rgb(252, 3, 3) 100%); 
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00',endColorstr='#fc0303',GradientType=1);">MYtext</a> 
+1

你必須知道字符串的那部分的確切的偏移的利益。在那裏開始並不難。當然,我們必須問「你有什麼嘗試」 – 2013-04-05 01:48:39

+0

我不知道如何隔離它,但我已經嘗試過這樣的事情。但沒有運氣。正在尋找更簡單的東西。 > – user2247282 2013-04-05 02:18:45

+0

這是什麼?除了錯誤導致on =無效。你可能意思是onclick或什麼的。假設這是正確的,這會給你什麼結果? – 2013-04-05 02:21:12

回答

0

唉!

var el = document.getElementById('bob'); 
el.setAttribute('style', el.getAttribute('style').replace('50%', '30%')); 

但是,這會更好:

var el = document.getElementById('bob'); 
el.style.backgroundImage = el.style.backgroundImage.replace(/50%/g, '30%'); 
+0

因爲將樣式操作爲屬性字符串感覺不對。 – bfavaretto 2013-04-05 02:24:24

+0

:)它可能會覺得錯誤,但我不知道任何其他方式來動態更改漸變。我試過你的代碼,但仍然沒有得到它的工作。我會在下一個評論中添加索引,因爲它很簡短。 – user2247282 2013-04-05 03:26:44

+0

'code' <!DOCTYPE html> MYTEXT 測試' – user2247282 2013-04-05 03:27:16

0

style屬性是一個對象,而不是一個字符串。所以,你必須做一些事情,如:

var bob = document.getElementById('bob'); 

var background = bob.style.backgroundImage; 

if (background) { 
    bob.style.backgroundImage = background.replace('50%','70%'); 
} 

您還可以使用setAttributestyle對象上,如果你喜歡:

bob.style.setAttribute('backgroundImage' ... 

setAttribute功能不正常(或工作方式不同)上IE處理style對象時。只需使用更短和更可靠的對象訪問語法來代替:

bob.style.backgroundImage = ... 

參見:http://www.quirksmode.org/dom/w3c_core.html

+0

謝謝,很高興知道setAttribute是不可靠的。無論如何,我更喜歡對象引用,所以很好地工作。你和bfavaretto都聚合在同一個解決方案上。謝謝。 – user2247282 2013-04-05 21:01:25