繁体   English   中英

如何使用Javascript重新定义CSS类

[英]How to redefine CSS classes with Javascript

假设我们已经定义了一个CSS类,它正在应用于页面上的各种元素。

colourful
{
    color: #DD00DD;
    background-color: #330033;
}

人们抱怨颜色,他们不喜欢粉红色/紫色。 因此,您希望让他们能够按照自己的意愿更改样式,并且可以选择自己喜欢的颜色。 你有一个小的颜色选择器小部件调用Javascript函数:

function changeColourful(colorRGB, backgroundColorRGB)
{
    // answer goes here
}

这个功能的主体是什么?

目的是当用户在颜色选择器上选择新颜色时,所有具有class="colourful"的元素将改变其样式。

我实际上会实现这个服务器端; 只需在用户的会话中存储用户的首选颜色(通过cookie或任何好的和简单的方式)并动态生成CSS,即

colourful {
  color: ${userPrefs.colourfulColour};
  background-color: ${userPrefs.colourfulBackgroundColour};
} 

如果它真的更适合你通过Javascript做到这一点,你可以使用Javascript操纵CSS。 例如,见:

var setStyleRule = function(selector, rule) {
    var stylesheet = document.styleSheets[(document.styleSheets.length - 1)];
    if(stylesheet.addRule) {
        stylesheet.addRule(selector, rule)
    } else if(stylesheet.insertRule) {
        stylesheet.insertRule(selector + ' { ' + rule + ' }', stylesheet.cssRules.length);
    }
};

jQuery的:

function changeColourful(colorRGB, backgroundColorRGB)
{
    $('.colourful').css({color:colorRGB,backgroundColor:backgroundColorRGB});
}

如果您希望更改在页面中保持不变,则必须将它们存储在cookie中并每次都重新应用该功能。

我只是尝试在<head>中使用一个空的<style>标签,然后动态填充它。 似乎至少在ff3中工作。

所以:

在<head>中插入如下内容:

<style id="customstyle" type="text/css"></style>

现在,您可以使用类似jquery的内容来替换或附加其内容:

替换:

$("#customstyle").text(".colourful { color: #345 ; }");

附加:

 $("#customstyle").append(".colourful { color: #345 ; }");

如果你想将它保存在某个地方,只需抓住内容:

  var csscontent =  $("#customstyle").text();

..然后你可以通过ajax将它发送回服务器。

我不知道直接操纵类,但你可以有效地做同样的事情。 这是jQuery中的一个例子。

$('.colourful').css('background-color', 'purple').css('color','red');

在普通的javascript中,你将不得不做更多的工作。

首先检查是否定义了document.styleSheets (请参阅@ alex的响应)。

如果没有,这个问题应该有用:
使用特定的CSS类在HTML文档中获取所有元素

请参阅接受答案中的链接以及底部的回复。

这只是答案的一部分。 您仍然需要使用每个元素的样式属性来应用新值。

特定div / color的快速示例 - 可以通过函数动态传递

document.getElementById('Your Div Name Here').style.background = 'white';

或者,更改指定项的类

document.getElementById('Your Div Name Here').classname = 'newclassname'

那假设你可以用这种方式指定div,如果没有,这个和节点循环解决方案Kevin的组合应该做的伎俩

这是将背景图像更改为样式表的完整示例。 第一部分找到合适的样式表。 在这里,我想要最后一个,其href包含“mycss.css”。 您还可以使用title属性。

第二部分找到正确的规则。 在这里,我放了一个标记“MYCSSRULE”,这样我就能找到正确的规则。

mycss.css中的css规则是:#map td,MYCSSRULE {background-image:url(“img1.png”); }

第三部分只是改变了规则。

此过程不适用于Internet Explorer 6.(IE 8没问题)。 适用于Firefox 3和Webkit。

希望它有所帮助。

function changeBgImg(newimage) {
  var i,n;
  var ssheets = document.styleSheets;         // all styleSheets. Find the right one
  var ssheet;

  // find the last one whose href contain "myhref"
  n = ssheets.length;
  for (i=n-1; i>=0 ;i--) {
    var thisheet = ssheets[i];
    if ( (null != thisheet.href) && (thisheet.href.indexOf("mycss.css") != -1) ) {
      ssheet = thisheet; break;
    }
  }

  if ( (null == ssheet) || ("undefined" == typeof(ssheet.cssRules))) {
    // stylesheet not found or internet explorer 6
    return;
  }

  // find the right rule
  var rule;
  n = ssheet.cssRules.length;
  for (i=0; i<n; i++) {
    var r = ssheet.cssRules.item(i);
    if (typeof(r.selectorText) == "undefined") { continue; }
    if (r.selectorText.indexOf("MYCSSRULE") != -1) {
      rule = r; break;
    }
  }

  if (null == rule) {
    // not found
    return;
  }

  rule.style.backgroundImage = "url(" + newImage + ")";
}

就像是

function changeColourful(colorRGB, backgroundColorRGB)
 {changeColor (document, colorRGB, backgroundColorRGB)}

function changeColor (node, color, changeToColor)
{
   for(var ii = 0 ; ii < node.childNodes.length; ii++)
   {
     if(node.childNodes[ii].childNodes.length > 0)
     {
        changeColor(node.childNodes[ii], color, changeToColor);
     }

      if(node[ii].style.backgroundColor == color)
      {
        node[ii].style.backgroundColor = changeToColor;
      }

   }


}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM