2014-04-03 72 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

相关问题