类名的添加,修改及删除
attr()及addClass()
addClass(class | fn) :为每个匹配的元素添加指定的类名。若要添加多个类名,请使用空格分开。为测试这两个方法添加类名的区别,我先写好了三个样式。
.one {
color: red;
}
.two {
font-size: 200%;
}
.three {
text-transform: uppercase;
}
首先测试addClass()方法,代码:
1 $('p').addClass('one two');
2 $('button:contains("addClass")').click(function() {
3 $('p').addClass('three');
4 });
测试前:
点击按钮后:
由代码和测试结果我们可得出结论: ①addClass()确实可以为元素添加类名,当需添加多个类名时,使用空格分开(图1)。②当class属性已经存在类名时,使用addClass()并不会删除修改原来存在的类名,会在原来的基础上添加类名,组成新的词列表。(图2)
attr(name | properties | key,value | fn) : 设置或返回被选元素的属性值。
测试attr()方法,代码:
1 $('div').attr('class', 'one');
2 $('button:contains("attr")').click(function() {
3 $('div').attr('class', 'two three');
4 });
测试前:
点击按钮后:
由代码和测试结果我们可得出结论: ①attr()方法可以为元素添加类名。(图1)。 ②当class属性已经存在类名时,使用attr()并不会保留原来存在类名,而将class值直接设置为新的词列表"two three"。同时我们发现attr()也支持同时添加多个类名(词列表)(图2)。因此若要保留"one"类名,只能$('div').attr('class', 'one two three')。
另外提下css()方法,当初做项目的时候使用过css()给元素添加类名:$('section').css('class', 'two'); 结果可想而是,一点用也没有。因此在这区分下attt()和css()的区别。attr()是获取/修改元素的属性(和html标签有关).而css()方法是获取/修改样式属性(和style有关)的。何为属性呢? 通常我们将id,src,alt,class称为属性,也即元素属性(想想attr不就是attribute的缩写吗)。样式如width,color等,可以使用.style.xxx表示(确实没有obj.style.class的写法,而是obj.className这种)。贴下别人的问答:地址
HTML DOM setAttribute()
setAttribute()这个方法接受两个参数: 要设置的特性名和值,如果特性已经存在,setAttribute()会以指定的值替换现有的值;如果特性不存在,setAttribure()则创建该属性并设置相应的值。测试setAttribute()代码:
1 var oSection = document.querySelector('section');
2 var oBtn = document.querySelector('.btn');
3 oSection.setAttribute('class', 'one');
4 oBtn.onclick = function() {
5 oSection.setAttribute('class', 'two three');
6 }
测试前:
点击按钮后:
由代码和测试结果我们可得出结论: ①setAttribute()方法可以添加类名(图1)。②当类名存在时,会以制定的值替换现有的值。(图2)。如要保留类名"one",则也许这么写: oSection.setAttribute('class', 'one two three');
removeClass()
既然可以在原来基础上追加类名,那么有在原来基础上删除类名的方法吗? 答案是有的。
removeClass([class | fn]) :从所有匹配的元素中删除全部或者指定的类。
1 $('button:contains("removeClass")').click(function() {
2 //删除指定的类名“two”
3 $('p').removeClass('two');
4 // 无参数 默认删除所有的类名
5 $('div').removeClass();
6 });
p元素和div元素都在原来测试后的基础上在调用removeClass()方法。
测试后的p元素:
测试后的div元素:
经过调用removeClass()方法后,p元素删除了指定类名“two”,剩下类名"one three"。而div元素则被删除了全部的类名。
若不想保存原来的类名(即属性值),可以使用以上除addClass()方法外的方法。