众所周知,在HTML文档中调用外部样式表来呈现样式是样式表
发挥最大威力的地方!
在写JS操作外部样式表的时候发现它有一个很大的局限性,
在JS中写style属性也是不符合标准的,因为它没有把行为层与
表现层分开,所以我就通过修改元素的className属性来操作样式,
刚开始感觉挺好,但是时间久了就发现在外部样式表
有大量Id选择符样式,如下所示:
#main{}
#cont div{}
#cont div .red{}
.cont div #red{}
这些样式定义怎样使用JS来调用?
尤其是包含了Id选择符的样式定义,
不希望直接写style属性,而是像修改元素的className属性
那样来操作,能否实现?
怎样实现?

解决方案 »

  1.   

    styleSheets里也有rules的操作啊,本来样式就是class、id和style,class和style不改,也就改id了
      

  2.   

    请问怎样更改啊!!!
    styleSheets,rules怎么使用啊?
    以前没有使用过,在IE和FF兼容吗?
    最好有个小例子。
      

  3.   

    <html>
    <style>
    .content{font-size:12px;}
    .content div#red{ color:red }
    #size1{ font-size:15px; }
    </style>
    <body>
    <div class="content">
    <div id="red">testtesttest</div>
    </div>
    <script>
    var red = document.getElementById("red");
    with(document.styleSheets[0]) {
    if (document.all) addRule(".content div#blue", "color:blue;font-size:20px;");
    else insertRule(".content div#blue" + "{" + "color:blue" + "}", cssRules.length);
    }
    red.id = "blue";//蓝色,20号字体
    </script>
    </body>
    </html>
    当前还有其它removeRule,deleteRule, selectorText等,lz可以上网查查
      

  4.   

    谢谢楼上了!!!十分感谢!!!
    但是我不想在JS代码中出现具体的CSS属性及其属性值
    在JS代码中只想出现.content div#blue这些标记, 而不出现color:blue;font-size:20px;这些内容
    请问该怎么办???
      

  5.   

    color:blue;这些内容已经在styleSheet中定义,你想通过js取这些内容然后赋值?
      

  6.   

    一般来说最好不要操作样式表。 你改改className 就行了。按照CSS潜规则来说活,ID选择器是你恒定义在(x)HTML中DOM特定元素的样式
    而类选择器,是可以被反复利用的在DOM上的样式
      

  7.   

    我的意思是说只想修改className 就行了
    具体属性均放在外部CSS文件中。
    但是className只能修改.content类定义,
    对于#blue定义怎样修改?
      

  8.   

    <html>
    <style>
    .content{font-size:12px;}
    .content div#red{ color:red }
    #size1{ font-size:15px; }
    </style>
    <body>
    <div class="content">
    <div id="red">testtesttest</div>
    </div>
    <script>
    var red = document.getElementById("red");
    with(document.styleSheets[0]) {
    if (document.all) addRule(".content div#blue", "color:blue;font-size:20px;");
    else insertRule(".content div#blue" + "{" + "color:blue" + "}", cssRules.length);
    }
    red.id = "blue";//蓝色,20号字体with(document.styleSheets[0]) {
    var sheetRules = document.all ? rules : cssRules;
    for (var j = sheetRules.length - 1; j >= 0; j--) {
    if (eval("/^.content div#blue$/i").test(sheetRules[j].selectorText)) {
    sheetRules[j].style.color = "green";
    sheetRules[j].style.fontSize = "30px"; //blue的style已改成绿色,30号字体
    }
    }
    }
    </script>
    </body>
    </html>
      

  9.   

    不管怎么样,太感谢楼上的大哥了!!!
    我想要的是下面的效果。<html>
    <link rel=stylesheet href="1.css" type="text/css" />
    <body>
    <div id="content1" class="content1" onmouseover="this.className='content2'" onmouseout="this.className='content1'" >content1</div>
    <div id="content2" class="content2" onmouseover="this.className='content1'" onmouseout="this.className='content2'">content2</div>
    <div id="size1" onmouseover="this.className=''" onmouseout="this.className=''">size1</div>
    <div id="size2" onmouseover="this.className=''" onmouseout="this.className=''">size2</div>
    </body>
    </html>.content1{color:red;font-size:35px; }
    .content2{ color:blue;font-size:35px;  }
    #size1{ font-size:15px; }
    #size2{ font-size:35px; }
    我的CSS代码全部在外部文件,
    className='content2'这句代码通过简单修改类名就实现了效果。
    className='size1'或者idName='size1'肯定不对,
    有没有类似于className的用语操作id的属性?
    addRule(".content div#blue", "color:blue;font-size:20px;");和
    style.fontSize = "30px"; 
    一样都是在JS中直接使用了具体属性名,
    我的意思是说只想修改CSS样式表定义中大括号前面的名称的就行了
    不知道我说清楚没有?
      

  10.   

    定义了应该就没法修改,不过你可以removeRule把样式去掉,再addRule自定义的样式,然后把样式复制过来