类名的添加,修改及删除

  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 });


  测试前:

java 去掉文档后缀 java去掉后缀名_游戏

  点击按钮后:

java 去掉文档后缀 java去掉后缀名_游戏_02

    由代码和测试结果我们可得出结论: ①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 });

  测试前:

java 去掉文档后缀 java去掉后缀名_java 去掉文档后缀_03

    点击按钮后: 

java 去掉文档后缀 java去掉后缀名_属性值_04

    由代码和测试结果我们可得出结论: ①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 }

  测试前:  

java 去掉文档后缀 java去掉后缀名_类名_05

       点击按钮后:     

java 去掉文档后缀 java去掉后缀名_游戏_06

    由代码和测试结果我们可得出结论: ①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元素: 

java 去掉文档后缀 java去掉后缀名_类名_07

    测试后的div元素: 

java 去掉文档后缀 java去掉后缀名_游戏_08

    经过调用removeClass()方法后,p元素删除了指定类名“two”,剩下类名"one three"。而div元素则被删除了全部的类名。

    若不想保存原来的类名(即属性值),可以使用以上除addClass()方法外的方法。