• jq的attr、prop和data区别


    prop()获取在匹配的元素集中的第一个元素的属性值。  

    大家都知道有的浏览器只要写disabled,checked就可以了,而有的要写成disabled = "disabled",checked="checked",比如用attr("checked")获取checkbox的checked属性时选中的时候可以取到值,值为"checked"但没选中获取值就是undefined。

    jq提供新的方法“prop”来获取这些属性,就是来解决这个问题的,以前我们使用attr获取checked属性时返回"checked"和"",现在使用prop方法获取属性则统一返回true和false。

    那么,什么时候使用attr(),什么时候使用prop()?
    1.添加属性名称该属性就会生效应该使用prop();
    2.是有true,false两个属性使用prop();
    3.其他则使用attr();
    项目中jquery升级的时候大家要注意这点!

    PS一下,如果你有JS性能洁癖的话,显然prop的性能更高,因为attr需要访问DOM属性节点,访问DOM是最耗时的。这种情况适用于多选项全选和反选的情况。

    以下是官方建议attr(),prop()的使用:

    jQuery.prop()和 jQuery.attr()方法同样都能够添加属性,但是也是有区别的,一般attr()用的比较频繁,但是有些情况用prop()更为方便。
    基本的使用:

        <style>
            .bg{
                200px;
                height:200px;
                background-color:red;
            }
            .bd{
                border:1px solid #000;
            }
        </style>
    <body>
    <div></div>
    </body>
    <script>
        $(function(){
            $("div").attr("class","bg");//样式加载成功
            console.log($("div").attr('class'));//bg
           // $("div").prop("class",'bd');//这样会替代掉.bg
            console.log($("div").prop("class"));
        });
    </script>
    

    那么,什么时候使用attr(),什么时候使用prop()?
    1.添加属性名称该属性就会生效应该使用prop();
    2.是有true,false两个属性使用prop();
    3.其他则使用attr();

    如下实例,当checked没有在标签中定义的时候,prop就能够获取属性的值。

    <body>
    <input type="checkbox">
    <lable>复选框</lable>
    </body>
    <script>
        $(function(){
            console.log($("input").attr("checked"));//undefined attr是去标签中寻找该属性
            console.log($("input").prop("checked"));//false prop直接获取属性内容
        });
    </script>
    

    checked是true和false时,attr返回属性名,prop返回属性的值

    <body>
    <input type="checkbox" checked="true" aaa="bbb">
    <lable>复选框</lable>
    </body>
    <script>
        $(function(){
            console.log($("input").attr("checked"));//checked  是true和false时,attr返回属性名
            console.log($("input").attr("aaa"));//bbb 不是true和false时,返回该属性的值
            console.log($("input").prop("checked"));//false prop直接获取属性内容
        });
    </script>
    

    以上例子看起来还是prop比较直接一点,可以考虑多用用。

    补充:JavaScript的getAttribute和 jQuery.attr()的问题

    首先看看JavaScript的getAttribute和 jQuery.attr()的差别,我写了两个例子,可以很明确的看出差别:
    jQ加载的库是<script src="./js/jquery-1.7.2.js"></script>

    <body>
    <input type="text" value="1">
    </body>
    <script>
        $(function(){
            console.log($("input").val());//1
            console.log($("input").attr("value"));//1
            var timer = null;
            timer = setInterval(function(){
                console.log($("input").val());//重新输入的值
                console.log($("input").attr("value"));重新输入的值
            },2000);
        });
    </script>
    
    <body>
    <input id="amount" type="text" value="1">
    </body>
    <script>
        document.addEventListener("DOMContentLoaded",function(){
            var oV = document.getElementById("amount");
            console.log(oV.value);//1
            console.log(oV.getAttribute("value"));//1
            setInterval(function(){
                console.log(oV.value);//重新输入的值
                console.log(oV.getAttribute("value"));//1
            },2000);
        },false);
    </script>
    

    以上两个例子中getAttribute不能够直接获取改变后的value值,只能获取初始值,而 jQuery.attr()可以;

    下面看看jQuery.data()方法

    <body>
    <div></div>
    </body>
    <script>
        $(function(){
            $("div").data("aaa","bbb");
            console.log($("div").data('aaa'));//bbb
            console.log($("div").attr('aaa'));//undefined
        });
    </script>
    

    加在data上面的数据只有data能够取到,相当于所有的data上面的数据都在一起,方便保存和使用。

     $(function(){
            $("div").data("aaa","bbb");
            $("div").attr("aaa","ccc");
            console.log($("div").data('aaa'));//bbb
            console.log($("div").attr('aaa'));//ccc
        });
    

    尽管变量名相同的情况下,也不会受到影响。

  • 相关阅读:
    close connection error java.sql.SQLRecoverableException: IO Error: Broken pipe
    Mysql 备份与恢复
    MACBOOK 破解wifi密码
    MAC 安装homebrew
    Linux(CentOS / RHEL 7) 防火墙
    ORA-01031: insufficient privileges
    Oracle登录认证
    ORA-12162: TNS:net service name is incorrectly specified
    lsnrctl: .... cannot restore segment prot after reloc: Permission denied
    CentOS / RHEL 配置yum源
  • 原文地址:https://www.cnblogs.com/jcxfighting/p/8480470.html
Copyright © 2020-2023  润新知