置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
}
}
开关灯案例:
html和css代码
<style>
.cls{
background-color: black;
}
</style>
<input type="button" value="开/关灯" id="btn">
JavaScript代码
页每个Element元素都有style和classname属性,可以通过CSS直接设置,也允许脚本指定文档元素的CSS样式,或修改应用到元素上的css类名,设置这些css相关的属性会改变文档元素的呈现。
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>
元素的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>
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);
}
盒子标签和属性对照 | |
---|---|
CSS语法(不区分大小写) | JavaScript语法(区分大小写) |
border | border |
border-bottom | borderBottom |
border-bottom-color | borderBottomColor |
border-bottom-style | borderBottomStyle |
border-bottom-width | borderBottomWidth |
border-color | borderColor |
border-left | borderLeft |
border-left-color | borderLeftColor |
border-left-style | borderLeftStyle |
border-left-width | borderLeftWidth |
border-right | borderRight |
border-right-color | borderRightColor |
border-right-style | borderRightStyle |
border-right-width | borderRightWidth |
border-style | borderStyle |
border-top | borderTop |
border-top-color | borderTopColor |
border-top-style | borderTopStyle |
border-top-width | borderTopWidth |
border-width | borderWidth |
clear | clear |
float | floatStyle |
margin | margin |
margin-bottom | marginBottom |
margin-left | marginLeft |
margin-right | marginRight |
margin-top | marginTop |
padding | padding |
padding-bottom | paddingBottom |
padding-left | paddingLeft |
padding-right | paddingRight |
padding-top | paddingTop |
颜色和背景标签和属性对照 | |
CSS 语法(不区分大小写) | JavaScript 语法(区分大小写) |
background | background |
background-attachment | backgroundAttachment |
background-color | backgroundColor |
background-image | backgroundImage |
background-position | backgroundPosition |
background-repeat | backgroundRepeat |
color | color |
样式标签和属性对照 | |
CSS语法(不区分大小写) | JavaScript 语法(区分大小写) |
display | display |
list-style-type | listStyleType |
list-style-image | listStyleImage |
list-style-position | listStylePosition |
list-style | listStyle |
white-space | whiteSpace |
文字样式标签和属性对照 | |
CSS 语法(不区分大小写) | JavaScript 语法(区分大小写) |
font | font |
font-family | fontFamily |
font-size | fontSize |
font-style | fontStyle |
font-variant | fontVariant |
font-weight | fontWeight |
文本标签和属性对照 | |
CSS 语法(不区分大小写) | JavaScript 语法(区分大小写) |
letter-spacing | letterSpacing |
line-break | lineBreak |
line-height | lineHeight |
text-align | textAlign |
text-decoration | textDecoration |
text-indent | textIndent |
text-justify | textJustify |
text-transform | textTransform |
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的跨浏览器操作*/
*请认真填写需求信息,我们会在24小时内与您取得联系。