zoukankan      html  css  js  c++  java
  • 深入学习jQuery特性操作

    前面的话

      每个元素都有一个或者多个特性,这些特性的用途就是给出相应元素或者其内容的附加信息。操作特性的DOM方法主要有3个:getAttribute()方法、setAttribute()方法和removeAttribute()方法,而在jQuery中用一个attr()与removeAttr()就可以全部搞定了,包括兼容问题。本文将介绍jQuery中的特性操作

    获取特性

      jQuery中用attr()方法来获取和设置特性,attr是attribute(特性)的缩写,在jQuery DOM操作中会经常用到attr()方法

    attr(attributeName)

      attr(传入特性名):获取特性的值,相当于DOM中的getAttribute()

    <div id="test"></div>
    <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
    <script>
    console.log(test.getAttribute('id'));//'test'    
    console.log($('#test').attr('id'));//'test'
    </script>

      [注意]attr()方法只获取第一个匹配元素的属性值。要获取每个单独的元素的属性值,我们依靠jQuery的.each()或者.map()方法循环

    <div class="test" id="ele1">元素一</div>
    <div class="test" id="ele2">元素二</div>
    <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
    <script>
    console.log($('.test').attr('id'));//'test'
    $('.test').each(function(index) {
      console.log(index+":"+$(this).attr('id'));//'1:ele1 2:ele2'
    });
    </script>

    prop()

      属性(property)和特性(attribute)是不同的。属性是DOM节点的属性,而特性是HTML标签的特性

      [注意]关于属性和特性的区别的详细信息移步至此

    <div id="test" data="abc"></div>
    <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
    <script>
    test.data = 123;
    //IE8-浏览器返回123,其他浏览器返回'abc'
    console.log(test.getAttribute('data'))
    console.log(test.data)//123
    //IE8-浏览器返回123,其他浏览器返回'abc'
    console.log($('#test').attr('data'))
    console.log($('#test').prop('data'))//123
    </script>

      由上面代码可知,jQuery并没有解决低版本IE浏览器属性和特性混淆的问题

    设置特性

      设置特性虽然依然使用attr()方法,但却有3种方式

    【1】attr(attributeName,value)

      attr(特性名, 特性值):设置特性的值,相当于DOM中的setAttribute()

    <div id="test"></div>
    <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
    <script>
    test.setAttribute('title','abc');
    console.log(test.getAttribute('title'))//'abc'
    $('#test').attr('title','123');    
    console.log($('#test').attr('title'));//'123'
    </script>

      jQuery禁止改变一个<input>或<button>元素的type特性,会静默失败。因为IE8-不会允许改变<input>或者<button>元素的type特性,静默失败

    <input id="test" type="text">
    <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
    <script>
    test.setAttribute('type','button');
    $('#test').attr('type','button');    
    </script>

    【2】attr(attributes)

      attr(attributes):给指定元素设置多个特性值,即{特性名一: “特性值一”,特性名二:“特性值二”,…}

      当设置多个特性,包裹特性名的引号是可选的

    <div id="test"></div>
    <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
    <script>
    test.setAttribute('title','abc');
    test.setAttribute('a','abc');
    console.log(test.getAttribute('title'))//'abc'
    console.log(test.getAttribute('a'))//'abc'
    $('#test').attr({
        title: '123',
        a: '123'
    });    
    console.log($('#test').attr('title'));//'123'
    console.log($('#test').attr('a'));//'123'
    </script>

      [注意]设置样式名“class”特性时,必须使用引号。否则IE8-浏览器下会报错

    <div id="test"></div>
    <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
    <script>
    $('#test').attr({
        class: 'test'
    });    
    //IE8-浏览器会报错,其他浏览器输出'test'
    console.log($('#test').attr('class'));
    </script>

    【3】attr(attributeName,function(index,attr))

      attr(特性名,函数值):通过使用一个函数来设置属性,可以根据该元素上的其它属性值返回最终所需的属性值

      函数中的index表示元素在匹配集合中的索引位置,html表示元素原来的HTML内容,this指向当前的元素,函数返回用来设置的值

    <div class="test" id="ele1" title="元素">元素一</div>
    <div class="test" id="ele2" title="元素" >元素二</div>
    <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
    <script>
    $('.test').attr('title',function(index,attr){
        return attr + this.className +index
    })
    console.log($('#ele1').attr('title'));//元素test0
    console.log($('#ele2').attr('title'));//元素test1
    </script>

      如果用javascript实现类似的效果,实际上就是字符串连接

      [注意]IE8-浏览器不支持getElementsByClassName()方法

    <div class="test" id="ele1" title="元素">元素一</div>
    <div class="test" id="ele2" title="元素" >元素二</div>
    <script>
    var classTest = document.getElementsByClassName('test');
    for(var i = 0; i < classTest.length; i++){
        classTest[i].title = classTest[i].title + classTest[i].className + i;
    }
    console.log(ele1.title);//元素test0
    console.log(ele2.title);//元素test1
    </script>

    删除特性

    removeAttr(attributeName)

      removeAttr()方法使用原生的removeAttribute()函数,但是它的优点是可以直接在一个jQuery 对象上调用该方法,并且它解决了跨浏览器的特性名不同的问题

      要移除的属性名从1.7版本开始,可以是一个空格分隔的属性列表

    <div id="ele1" title="元素" data="value">元素</div>
    <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
    <script>
    console.log($('#ele1').attr('title'));//'元素'
    console.log($('#ele1').attr('data'));//'value'
    $('#ele1').removeAttr('title data');
    console.log($('#ele1').attr('title'));//undefined
    console.log($('#ele1').attr('data'));//undefined
    </script>
  • 相关阅读:
    Javascript设计模式理论与实战:单例模式
    详解CSS盒模型
    linux添加计划任务
    python删除目录下七天前创建的文件
    centos上源码安装clang 3.8
    使用postman发送数据并构建collections执行测试
    python多线程实现同时执行两个while循环
    使用Python写Windows Service服务程序
    用Pyinstaller打包发布exe应用
    使用Jmeter监测服务器cpu、内存等性能
  • 原文地址:https://www.cnblogs.com/xiaohuochai/p/5916009.html
Copyright © 2011-2022 走看看