• attr 和 prop的区别和使用


      一. attr和prop的区别

      要想弄清楚attr和prop的区别,就要先搞清楚js中使用DOM方法获取设置属性和使用对象方法获取设置属性的区别。

      在javascript中使用DOM方法设置获取属性值主要是依靠setAttribute和getAttribbute,而使用对象方法获取属性值主要是靠节点对象.属性名称。

      那么这两种方法有什么不同?

      1.  获取属性值

      假设有这样的html代码:

      <div id = 'id_div' class = 'class-div' a = 'aaa'>

      那么首先使用getAttribute进行测试:

    var div = document.getElementById('id_div');
    console.log(div.getAttribute('id'));      结果是id_div
    console.log(div.getAttribute('class'));    结果是class-div        
    console.log(div.getAttribute('a'));      结果是aaa

      可见使用getAttribute,节点的固有属性和自定义属性都可以获取。

      接下来使用对象方法进行测试:

    var div = document.getElementById('id_div');
    console.log(div.id);        结果是id_div
    console.log(div.className);    结果是class-div
    console.log(div.a);         结果是undefined

      由此可见使用对象方法获取属性值的话,如果是节点的固有属性那么是可以获取到的,但是如果是自定义的属性,那么这样是获取不到的。

      2.  设置属性值

      首先使用setAttribute设置属性值。

    var div = document.getElementById('id_div');
    div.setAttribute('class','bbb');
    console.log(div.getAttribute('class'));    bbb
    console.log(div.className);           bbb

      这短代码是用setAttribute设置了固有属性class的值,用两种方法获取class的值。结果是两者都能够获取到。

    var div = document.getElementById('id_div');
    div.setAttribute('b','bbb');
    console.log(div.getAttribute('b'));    bbb
    console.log(div.b);              undefined

      这段代码是用setAttribute设置了一个自定义属性的值,结果显示使用对象方法不能够获取到属性的值。另外在html文档的结构中,我们也可以看到,属性b也出现在了html文档中。

      然后我们使用对象方法设置属性值。

    var div = document.getElementById('id_div');
    div.className = 'bbb';
    console.log(div.getAttribute('class'));      bbb
    console.log(div.className);             bbb

      结果是二者都是一样的结果。

    var div = document.getElementById('id_div');
    div.b = 'bbb';
    console.log(div.getAttribute('b'));        null
    console.log(div.b);                 bbb

      而对于使用对象方法设置属性值,此时使用DOM方法获取的值为null,而使用对象方法成功获取到bbb。看一下html文档,发现属性b并没有出现在html文档中。

      最后我们在实验一下这样的代码

    var div = document.getElementById('id_div');
    div.b = 'bbb';
    div.setAttribute('b','aaa');
    console.log(div.getAttribute('b'));        aaa
    console.log(div.b);                  bbb

      这段代码,我们分别都使用两种方法对一个自定义属性进行设置。结果显示,用两种方法获取的结果并不相同。

    var div = document.getElementById('id_div');
    div.className = 'bbb';
    div.setAttribute('class','aaa');          
    console.log(div.getAttribute('class'));      aaa
    console.log(div.className);             aaa

      这段代码我们是用两种方法分别对固有属性class设置了不同的值,但是结果却显示的是最后修改的值。说明二者都影响了class。

      之所以要区分这二者的区别,是因为,attr使用的就是DOM方法操作属性,而prop使用的是对象方法操作属性。因此也可知道二者的区别就是:attr对固有属性和自定义属性均可操作,而prop只能对固有属性进行操作(事实上也可以对自定义属性进行操作,但是自定义属性不能够影响到html文档)。因此当对固有属性进行操作的时候就是用prop,而对自定义属性进行操作的时候就用attr。

      而对input 的checked,selected,disabled属性,由于prop使用的是布尔值进行操作,因此更加方便,所以这种情况,一般使用prop。另外prop还可以设置和返回一下的属性:tagName、selectedIndex、nodeName、nodeType、ownerDocument、defaultChecked和defaultSelected等。

      

  • 相关阅读:
    let与const的区别
    IOS客户端UIwebview下web页面闪屏问题
    移动端click事件延迟300ms问题
    css3+visbibilty解决淡入淡出问题
    git学习之branch分支
    git学习之冲突解决办法
    webpack+vue-cli项目打包技巧
    一个高级PHP工程师所应该具备的
    多站点
    PHP error_reporting() 错误控制函数功能详解
  • 原文地址:https://www.cnblogs.com/jyybeam/p/5779988.html
Copyright © 2020-2023  润新知