2014-04-03 67 views
3

我正在爲某個站點創建樣式表,使用javascript將類分配給某些元素。無論出於何種原因,某些'td'元素使用奇怪的類分配和內聯樣式,因此我將它們循環,清理並分配適當的類名稱以在外部樣式表中引用。Javascript:獲取具有不正確樣式定義的元素的內容

我沒有訪問網站本身(也沒有管理權限來更改任何內容),因此我使用Firefox的Stylish和Greasemonkey(加上Adblock來處理原始樣式表)。

這裏負責的是的JS代碼一小部分:

var cellStyleBg = cCell.style.backgroundColor; 
if (cellStyleBg) { 
switch(cellStyleBg) { 
    case 'white': 
     cCell.removeAttribute('style'); 
     if (cCell.parentNode.nodeName == 'TR') { 
      cCell.parentNode.className = 'deadlineSet'; 
     } 
     break; 
... 

的問題是存在這樣的情況,這並不工作一個特殊情況:

<td class="td2h" style="background: dd97f0;"> 

正如你所看到的,顏色代碼前面沒有octotorp。我認爲這是在這種情況下變量cellStyleBg爲'null'的原因。

我試着(而不是'cCell.style.backgroundColor')使用'cCell.style'和'cCell.style.background',但它們不會返回純文本供我解析。

我能做些什麼來處理這種特殊情況?

+0

我可能會丟失一些東西在這裏所以我就發表評論,但你可以串連帶'cellStyleBg'變量的'#'? 'if('#'+ cellStyleBg){' –

+0

這正是問題 - cellStyleBg由於某種原因是空的,所以我無法對內容做任何事情。我懷疑原因是顏色代碼無效,因此JS根本沒有被視爲價值。 – XNRL

+0

啊,我明白了,我已經倒過來了......看起來你有一個很好的答案! –

回答

1

我認爲唯一的方法就是獲取style屬性的原始值。 您可以通過

//will output background: dd97f0 
cCell.getAttribute('style'); 

做到這一點。如果需要,可以使用擊穿這個片段

的風格融入鍵值對
//give "background: dd97f0", will output "background=dd97f0" 
var stylePattern = /(.*?):([^;]*);?/g 
while (match = stylePattern.exec(style)) { 
    console.log(match[1].trim() + "=" + match[2].trim()); 
} 
+1

打我到這..正準備發表一個答案! – Pete

+0

我在Scratchpad中試過,它確實有效。謝謝一堆! – XNRL

相關問題