jQuery的属性与样式(2)

jQuery的属性与样式之增加样式.addClass()

通过动态改变类名(class),可以让其修改元素呈现出不同的效果。

在HTML结构中里,多个class以空格分隔,

当一个节点(或称为一个标签)含有多个class时,DOM元素响应的className属性获取的不是class名称的数组,而是一个含有空格的字符串,

这就使得多class操作变得很麻烦。同样的jQuery开发者也考虑到这种情况,增加了一个.addClass()方法,用于动态增加class类名。

 

.addClass( className )方法

  1. .addClass( className ) : 为每个匹配元素所要增加的一个或多个样式名。
  2. .addClass( function(index, currentClass) ) : 这个函数返回一个或更多用空格隔开的要增加的样式名。

注:

 .addClass()方法不会替换一个样式类名。它只是简单的添加一个样式类名到元素上。 

简单的描述下:在p元素增加一个newClass的样式

 <p class="orgClass"> $("p").addClass("newClass") 

那么p元素的class实际上是 class="orgClass newClass"样式只会在原本的类上继续增加,通过空格分隔。

示例源码:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <title></title>
    <style>
    .left,
    .right {
        width: 300px;
        height: 120px;
    }    
    .left div,
    .right div {
        width: 100px;
        height: 90px;
        padding: 5px;
        margin: 5px;
        float: left;
        border: 1px solid #ccc;
    }        
    .newClass{
        background: #bbffaa;
    }

    .imoocClass{
        background: red;
    }
    </style>
    <script src="http://libs.baidu.com/jquery/1.9.1/jquery.js"></script>
</head>

<body>
    <h2>.addClss()方法</h2>
    <div class="left">
        <div class="aaron">
            <p>newClass</p>
        </div>
        <div class="aaron">
            <p>newClass</p>
        </div>
    </div>
    <div class="right">
        <div class="aa bb imooc">
            <article>
                <p>imoocClass</p>
            </article>
        </div>
        <div class="bb cc imooc ">
            <article>
                <p>imoocClass</p>
            </article>
        </div>
    </div>

    <script type="text/javascript"> 
        //class=left下div元素增加一个新的样式,增加背景颜色
        $('.left div').addClass('newClass')
    </script>

    <script type="text/javascript"> 
    
        //通过className(fucntion)方法
        //这个函数返回一个或更多用空格隔开的要增加的样式名。
        //接收index 参数表示元素在匹配集合中的索引位置和html 参数表示元素上原来的 HTML 内容

        //找到所有的div,然后通过addClass设置颜色,根据返回的className的判断,
        $("div").addClass(function(index,className) {

            //找到类名中包含了imooc的元素
            if(-1 !== className.indexOf('imooc')){
                //this指向匹配元素集合中的当前元素
                $(this).addClass('imoocClass')
            }
        });
    </script>

</body>
</html>
demo

 

jQuery的属性与样式之删除样式.removeClass()

jQuery通过 .addClass() 方法可以很便捷的增加样式。

如果需要样式之间的切换,同样jQuery提供了一个很方便的 .removeClass() ,它的作用是从匹配的元素中删除全部或者指定的class。

.removeClass( )方法

  1. .removeClass( [className ] ):每个匹配元素移除的一个或多个用空格隔开的样式名。
  2. .removeClass( function(index, class) ) : 一个函数,返回一个或多个将要被移除的样式名。

注:

如果一个样式类名作为一个参数,只有这样式类会被从匹配的元素集合中删除 。 如果没有样式名作为参数,那么所有的样式类将被移除。

示例源码:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <title></title>
    <style>
    .left,
    .right {
        width: 300px;
        height: 120px;
    }
    
    .left div,
    .right div {
        width: 100px;
        height: 90px;
        padding: 5px;
        margin: 5px;
        float: left;
        border: 1px solid #ccc;
    }
        
    .newClass{
        background: #bbffaa;
    }

    .imoocClass{
        background: red;
    }

    </style>
    <script src="http://libs.baidu.com/jquery/1.9.1/jquery.js"></script>
</head>

<body>
    <h2>.removeClass()方法</h2>
    <div class="left">
        <div class="aaron newClass">
            <p>newClass</p>
        </div>
        <div class="aaron newClass">
            <p>newClass</p>
        </div>
    </div>
    <div class="right">
        <div class="aa bb imoocClass">
            <article>
                <p>imoocClass</p>
            </article>
        </div>
        <div>
            <article>
                <p>imoocClass</p>
            </article>
        </div>
    </div>

    <script type="text/javascript"> 
        //class=left下div元素删除newClass样式
        $('.left div').removeClass('newClass')
    </script>


    <script type="text/javascript"> 
        //.removeClass() 方法允许我们指定一个函数作为参数,返回将要被删除的样式
        $('.right > div:first').removeClass(function(index,className){
            
            //className = aa bb imoocClass
            //把div的className赋给下一个兄弟元素div上作为它的class
            $(this).next().addClass(className)

            //删除自己本身的imoocClass
            return 'imoocClass'
        })


    </script>

</body>
</html>
demo

 

jQuery的属性与样式之切换样式.toggleClass()

在做某些效果的时候,可能会针对同一节点的某一个样式不断的切换,也就是addClass与removeClass的互斥切换,比如隔行换色效果。

jQuery提供一个toggleClass方法用于简化这种互斥的逻辑,通过toggleClass方法动态添加删除Class,一次执行相当于addClass,再次执行相当于removeClass。

 

 .toggleClass( )方法 :

在匹配的元素集合中的每个元素上添加或删除一个或多个样式类,取决于这个样式类是否存在或值切换属性。

即:如果存在(不存在)就删除(添加)一个类。

  1. .toggleClass( className ):在匹配的元素集合中的每个元素上用来切换的一个或多个(用空格隔开)样式类名
  2. .toggleClass( className, switch ):一个布尔值,用于判断样式是否应该被添加或移除
  3. .toggleClass( [switch ] ):一个用来判断样式类添加还是移除的 布尔值
  4. .toggleClass( function(index, class, switch) [, switch ] ):用来返回在匹配的元素集合中的每个元素上用来切换的样式类名的一个函数。接收元素的索引位置和元素旧的样式类作为参数

注:

  1. toggleClass是一个互斥的逻辑,也就是通过判断对应的元素上是否存在指定的Class名,如果有就删除,如果没有就增加。
  2. toggleClass会保留原有的Class名后新增,通过空格隔开。

示例源码:

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>隔行换色</title>
    <script src="http://libs.baidu.com/jquery/1.9.1/jquery.js"></script>
    <style type="text/css">
    body,
    table,
    td,
    {
        font-family: Arial, Helvetica, sans-serif;
        font-size: 12px;
    }
    
    .h {
        background: #f3f3f3;
        color: #000;
    }
    
    .c {
        background: #ebebeb;
        color: #000;
    }
    </style>
</head>

<body>
   
    <h4>.toggleClass(className)和.toggleClass(className,switch)</h4>
    <table id="table" width="50%" border="0" cellpadding="3" cellspacing="1">
        <tr>
            <td>慕课jQuery入门</td>
            <td>慕课jQuery入门</td>
        </tr>
        <tr>
            <td>慕课jQuery入门</td>
            <td>慕课jQuery入门</td>
        </tr>
        <tr>
            <td>慕课jQuery入门</td>
            <td>慕课jQuery入门</td>
        </tr>
        <tr>
            <td>慕课jQuery入门</td>
            <td>慕课jQuery入门</td>
        </tr>
        <tr>
            <td>慕课jQuery入门</td>
            <td>慕课jQuery入门</td>
        </tr>
    </table>
    <script type="text/javascript">
    //给所有的tr元素加一个class="c"的样式
    $("#table tr").toggleClass("c");
    </script>
    <script type="text/javascript">
    //给所有的偶数tr元素切换class="c"的样式
    //所有基数的样式保留,偶数的被删除
    $("#table tr:odd").toggleClass("c");
    </script>
    <script type="text/javascript">
    //第二个参数判断样式类是否应该被添加或删除
    //true,那么这个样式类将被添加;
    //false,那么这个样式类将被移除
    //所有的奇数tr元素,应该都保留class="c"样式
    $("#table tr:even").toggleClass("c", true); //这个操作没有变化,因为样式已经是存在的
    </script>
</body>
</html>
demo

 

posted @ 2017-06-02 10:56  Lucky锦  阅读(169)  评论(0)    收藏  举报