整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

Js基础6:动态设置class

置class的方法:

 // 修改类名 可以同时修改多个
 element.className = "name1 name2 ..."
 
 // 在类名列表里添加类名
 element.classList.add("active");
 // 在类名列表里删除类名
 element.classList.remove("active");

1、开关思想

开关思想:定义一个变量, 这个变量决定了一个状态,事件触发的时候,根据这个变量的值,执行对应的操作,操作完还需要修改这个变量的值。

比如:点击按钮,显示或隐藏div

 // 需要一个变量存储状态
 var flag = true;
 get_id("btn").onclick = function () {
     // console.log("点击事件触发了");
     // if(flag==true){
     if (flag) {
         // 把div的left值改成-200px
         my$("box").style.left = "-200px";
         // 需要把flag改成false,防止下一次点击这个flag还是true,如果flag还是true,就会一直走这里的代码
         flag = false
    } else {
         my$("box").style.left = "0px";
         // 防止下一次点击flag还是false,就还是会走这里的代码
         flag = true
    }
 }
 

开关灯案例:

  1. 当点击"关 灯"按钮时,将body背景颜色设置成黑色,同时将 "关 灯" 设置成 "开 灯";
  2. 当点击"开 灯"按钮时,将body背景颜色设置成白色,同时将 "开 灯" 设置成 "关 灯".

html和css代码

 <style>
 .cls{
      background-color: black;
 }
 </style>
 <input type="button" value="开/关灯"  id="btn">

JavaScript代码

页每个Element元素都有style和classname属性,可以通过CSS直接设置,也允许脚本指定文档元素的CSS样式,或修改应用到元素上的css类名,设置这些css相关的属性会改变文档元素的呈现。

1 用JS修改标签的 class 属性值:

class 属性是在标签上引用样式表的方法之一,它的值是一个样式表的选择符,如果改变了 class 属性的值,标签所引用的样式表也就更换了。

更改一个标签的 class 属性的代码是:

document.getElementById( id ).className = 字符串;

document.getElementById( id ) 用于获取标签对应的 DOM 对象,你也可以用其它方法获取。className 是 DOM 对象的一个属性,它对应于标签的 class 属性。字符串 是 class 属性的新值,它应该是一个已定义的CSS选择符。

利用这种办法可以把标签的CSS样式表替换成另外一个,也可以让一个没有应用CSS样式的标签应用指定的样式。

举例1,代码如下:

<style type="text/css">

.txt {

font-size: 30px; font-weight: bold; color: red; }

</style>

<div id="tt">欢迎光临!</div>

<p><button on click="setClass()">更改样式</button></p>

<script type="text/javas cript">

function setClass()

{

document.getElementById( "tt" ).className = "txt";

}

</script>

举例2,代码如下:

<script type="text/javascript">

<!--

var h=document.getElementById("tab").getElementsByTagName("h3");

var d=document.getElementById("tab").getElementsByTagName("div");

function go_to(ao){

for(var i=0;i<h.length;i++){

if(ao-1==i){

h[i].className+=" up";

d[i].className+=" block";

}

else {

h[i].className=" ";

d[i].className=" ";

}

}

}

//-->

</script>

2 用JS修改标签的 style 属性值:

元素的style属性可以直接设置元素的外观属性。Style 对象的属性和 CSS 属性是一一对应的,可以直接设置,也可以通过JS动态更改。

更改一个标签的 style 属性的代码是:

document.getElementById( id ).style.属性名 = 值;

document.getElementById( id ) 用于获取标签对应的 DOM 对象,你也可以用其它方法获取。style 是 DOM 对象的一个属性,它本身也是一个对象。属性名 是 Style 对象的属性名,它和某个CSS属性是相对应的。

说明:这种方法修改的单一的一个CSS属性,它不影响标签上其它CSS属性值。

举例,代码如下:

div id="t2">欢迎光临!</div>

<p><button on click="setSize()">大小</button>

<button on click="setColor()">颜色</button>

<button on click="setbgColor()">背景</button>

<button on click="setBd()">边框</button>

</p>

<script type="text/java script">

function setSize()

{

document.getElementById( "t2" ).style.fontSize = "30px";

}

function setColor()

{

document.getElementById( "t2" ).style.color = "red";

}

function setbgColor()

{

document.getElementById( "t2" ).style.backgroundColor = "blue";

}

function setBd()

{

document.getElementById( "t2" ).style.border = "3px solid #FA8072";

}

</script>

3 综合实例

function clk(event) {

var parent = document.getElementById("parent");

//改变className

var child0 = document.createElement("div");

child0.innerHTML = "child0";

child0.className = "newDiv";

parent.appendChild(child0);

//改变cssText

var child1 = document.createElement("div");

child1.innerHTML = "child1";

child1.style.cssText = "color:red;";

parent.appendChild(child1);

//改变直接样式

var child2 = document.createElement("div");

child2.innerHTML = "child2";

child2.style.fontSize = "28px";

parent.appendChild(child2);

}

4 JS设置CSS的语法与CSS语法的区别

盒子标签和属性对照
CSS语法(不区分大小写)JavaScript语法(区分大小写)
borderborder
border-bottomborderBottom
border-bottom-colorborderBottomColor
border-bottom-styleborderBottomStyle
border-bottom-widthborderBottomWidth
border-colorborderColor
border-leftborderLeft
border-left-colorborderLeftColor
border-left-styleborderLeftStyle
border-left-widthborderLeftWidth
border-rightborderRight
border-right-colorborderRightColor
border-right-styleborderRightStyle
border-right-widthborderRightWidth
border-styleborderStyle
border-topborderTop
border-top-colorborderTopColor
border-top-styleborderTopStyle
border-top-widthborderTopWidth
border-widthborderWidth
clearclear
floatfloatStyle
marginmargin
margin-bottommarginBottom
margin-leftmarginLeft
margin-rightmarginRight
margin-topmarginTop
paddingpadding
padding-bottompaddingBottom
padding-leftpaddingLeft
padding-rightpaddingRight
padding-toppaddingTop
颜色和背景标签和属性对照
CSS 语法(不区分大小写)JavaScript 语法(区分大小写)
backgroundbackground
background-attachmentbackgroundAttachment
background-colorbackgroundColor
background-imagebackgroundImage
background-positionbackgroundPosition
background-repeatbackgroundRepeat
colorcolor


样式标签和属性对照
CSS语法(不区分大小写)JavaScript 语法(区分大小写)
displaydisplay
list-style-typelistStyleType
list-style-imagelistStyleImage
list-style-positionlistStylePosition
list-stylelistStyle
white-spacewhiteSpace


文字样式标签和属性对照
CSS 语法(不区分大小写)JavaScript 语法(区分大小写)
fontfont
font-familyfontFamily
font-sizefontSize
font-stylefontStyle
font-variantfontVariant
font-weightfontWeight


文本标签和属性对照
CSS 语法(不区分大小写)JavaScript 语法(区分大小写)
letter-spacingletterSpacing
line-breaklineBreak
line-heightlineHeight
text-aligntextAlign
text-decorationtextDecoration
text-indenttextIndent
text-justifytextJustify
text-transformtextTransform
vertical-align

verticalAlign

从上表可以看出,两者的写法区别在于CSS是不区分大小写的,所以两个英文字中间用了一个横杠"-",用JS区分大小写,所以不用横杠"-",而用英文的小驼峰式命名法(lower camel case,第一个单字以小写字母开始,第二个单字的首字母大写)。

-End-

/**

 * @author zswxjjh

 * @date  2021/3/29

 */
'use  strict';

/*
* 模仿DOMTokenList对象,提供contains()
* add(),remove()。toggle()方法
* 重写toString方法,为了模拟类数组特性
* 提供toArray方法
*
* */
var  classList=(function () {
  /*
  * e是一个元素,定义一个CSSClassList类模拟
  * DOMTokenList类
  * */
  function classList(e) {
   /* if(e.classList)
      return e.classList;
    else*/
      return new CSSClassList(e);
  }

  /*
  * 定义CSSClassList类
  * */
  function CSSClassList(e) {
     this.e=e;
  }

  /*
  * c是一个合法的类名,判断是否包含给定的类名
  * 返回boolean
  * */
  CSSClassList.prototype.contains=function (c) {
      //是否合法
    if(!c)
    {
      throw new TypeError('参数不存在!');
    }
    else  if(c.length===0 || c.lastIndexOf(' ')!==-1/*c包含空格*/)
    {
      throw new TypeError('不合法的类名:"'+c+'"!');
    }
    if(!this.e.className)
      return false;
   if(this.e.className===c)
     return true;
   return this.e.className.search('\\b'+c+'\\b')!==-1;
  };

  /*
  * 追加一个类名在尾部
  *
  * */
  CSSClassList.prototype.add=function (c) {
      if(this.contains(c))
        return;
      //判断值里面是否以空格结尾
      var classes=this.e.className;
       if(!classes)
         this.e.className='';
       if(classes.length!==0 && classes[classes.length-1]!==' ')/*不是以空格结尾*/
       {
          c=' '+c;
       }
       this.e.className+=c;
  };
  /*
  * 移除类名字c
  * */
  CSSClassList.prototype.remove=function (c) {
     if(this.contains(c))
     {
       var pattern=new RegExp('\\b'+c+'\\b\\s*','g');
       this.e.className=this.e.className.replace(pattern,'');
       if(!this.e.className)
       {
         this.e.removeAttribute('class');
       }
     }
  };

  /*
  * 如果c存在,删除c,返回false
  * 否则,追加c,返回true
  * */
  CSSClassList.prototype.toggle=function (c) {
     if(this.contains(c))
     {
       this.remove(c);
       return false;
     }
     else
     {
       this.add(c);
       return true;
     }
  };

  /*
  * 覆盖toString方法
  * */
  CSSClassList.prototype.toString=function () {
      return this.e.className;
  };

  /*
  * 提供类数组的功能,转换成数组
  * */
  CSSClassList.prototype.toArray=function () {
      return this.e.className.match(/\b\w+\b/g) ||[];
  };

  return classList;
})();
/*以上代码提供对HTML5标签属性class的跨浏览器操作*/