【问题标题】:Can't .replace style attribute? Works for src, height etc不能 .replace 样式属性?适用于 src、高度等
【发布时间】:2013-10-25 10:22:10
【问题描述】:

我需要 javascript 来更改表格和 tr 标签中的背景颜色(我无法控制的 html 生成的服务器端)

这里是要修改的html

 <table cellspacing="0" cellpadding="3" rules="all" id="cphMain_gvStore" style="background-color:#DEBA84;border-color:#DEBA84;border-width:1px;border-style:None;border-collapse:collapse;">
        <tr style="color:White;background-color:#A55129;font-weight:bold;">

这是我的脚本(基于更改图像 src 的工作脚本)

 var tablec2 = document.getElementsByTagName('tr');

  for (var i=0; i<tablec2.length; i++) {
  var tr = tablec2[i];

   tr.style = tr.style.replace(/A55129$/, '888');
   tr.style = tr.style.replace(/FFF7E7$/, 'F9F9F9');
}

任何想法为什么这种类型的脚本适用于更改高度、宽度和 src 或图像标签但拒绝更改此表的样式标签?

我也使用这个脚本来改变 td 高度,但由于某种原因,样式不想配合。

这是处理图像的脚本:

var images = document.getElementsByTagName('img');

for (var i=0; i<images.length; i++) {
var img = images[i];

img.src = img.src.replace(/0-1-1$/, '0-0-1');

   if (img.width == '240' && img.height == '240') {
    img.width = '320';
    img.height = '320';
   }
}

【问题讨论】:

  • 你可以使用jquery吗?
  • 你调试tr.style了吗? style 是一个特殊对象,包含所有元素的样式,而不是属性内容 - 如果您只想编辑样式属性,则应使用 tr.getAttribute('style')
  • Style 不是其 CssStyleDeclaration 对象的字符串。
  • @Mr.GT 为什么要为这样的任务加载整个外部库?
  • 感谢您的回答 - 我会这样做吗? code tr.getAttribute('style').backgroundColor = tr.getAttribute('style').backgroundColor.replace(/A55129$/, '888');

标签: javascript


【解决方案1】:

style 属性不直接映射到 style 属性,它不是字符串。

改为编辑 .style.backgroundColor.style.color

【讨论】:

    【解决方案2】:

    试试这个,

    var tablec2 = document.getElementsByTagName('tr');
    for (var i=0; i<tablec2.length; i++) {
    var tr = tablec2[i];                    if(colorToHex(tr.style.backgroundColor).toLowerCase() == "#A55129".toLowerCase()){
        tr.style.backgroundColor = "#888";
    }
    }
    
    function colorToHex(color) {
        if (color.substr(0, 1) === '#') {
            return color;
        }
        var digits = /(.*?)rgb\((\d+), (\d+), (\d+)\)/.exec(color);
    
        var red = parseInt(digits[2]);
        var green = parseInt(digits[3]);
        var blue = parseInt(digits[4]);
    
        var rgb = blue | (green << 8) | (red << 16);
        return digits[1] + '#' + rgb.toString(16);
    };
    

    【讨论】:

    • 所以有些东西阻止它在我的页面上生效......再次感谢
    • 当我将网站的整个源代码粘贴到 jsfiddle 中时,它不起作用
    • 如果可能,请分享你的 jsfiddle 链接,以便我能够看到问题
    • 嗨,我在你给我的 jsfiddle 链接上更新了它,我认为问题在于该表似乎嵌套在另一个表中。由于页面来自不是我的服务器,我也无法更改。
    猜你喜欢
    • 2021-04-07
    • 2012-10-14
    • 1970-01-01
    • 2020-05-12
    • 2018-01-03
    • 2012-11-10
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多