attr()和prop的区别

版权声明:本文为博主(shixinbing)原创文章,转载请注明出处 https://blog.csdn.net/shixinbing/article/details/82143709               

                                                attr()和prop的区别

一、两者定义

1、attr() :

       获取匹配的元素集合中的第一个元素的属性的值 或 设置每一个匹配元素的一个或多个属性。 

*.attr( attributeName, value ) 给元素的某个属性设置值

*.attr(attributeName)   获取元素某个属性

2、prop() :

  获取匹配的元素集中第一个元素的属性(property)值或设置每一个匹配元素的一个或多个属性。

*.prop( propertyName, value )  给元素DOM对象的某个属性设置值

*.prop( properties ) 获取元素DOM对象的某个属性

两者都是获取元素的属性的值和设置元素的值,但两者获取的东西却有不同。

在jQuery中,attribute和property却是两个不同的概念。attribute表示HTML文档节点的属性,property表示JS对象的属性

根据官方的建议:具有 true 和 false 两个属性的属性,如 checked, selected 或者 disabled 使用prop(),其他的使用 attr()。

二、区别

先看一下如下代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>attr和prop区别</title>
    <script src="jquery.js"></script>
    <style type="text/css">
        .checkBox{

        }
    </style>

</head>
<body>
    <input id="check" type="checkbox" class="checkBox">
    <span>篮球</span>
</body>
</html>
<script>
    var check = $("#check");

    check.on('change', function () {
        var check_attr = check.attr("checked");
        var check_prop = check.prop("checked");
        
        console.log('check_attr=' + check_attr); // undefined
        console.log('check_prop=' + check_prop); // false
    });
</script>

执行结果:

得到的结果

                     1)attr是undefined,无法获得checked的属性值

                     2 )prop是true,可以获得checked的属性

区别:js把html封装成dom元素,attr获得的是html的元素属性,而prop获得的是dom属性。

在jQuery中,

prop() 函数的设计目标是,用于设置或获取指定DOM元素(指的是JS对象,Element类型)上的属性(property);

attr() 函数的设计目标是,用于设置或获取指定DOM元素所对应的文档节点上(指HTML的元素,元素节点)的属性(attribute)

我们可以看到,不管我们怎么点击单选(checkbox),在html元素标签中并不会出现checked这个属性,但是我们可以在dom对象这个属性却会在改变。

通过在浏览器中调试可以看到:

通过在浏览器中选中要看的标签,在控制台中可以输入$0,打印出所选中的标签。console.dir($0)打印出所选元素的dom对象

从上图中我们可以看到在元素标签中没有checked=“checked”这个属性,但我们可以看到在dom对象中checked:true这个属性的。

而这个属性我们只能通过prop来获得。

jquery中attr和prop的区别介绍:

 •对于HTML元素本身就带有的固有属性,且可能在标签中并不会改变或显示的属性,在处理时,使用prop方法。

 •对于HTML元素我们自己自定义的DOM属性,在标签中会改变或显示的属性,在处理时,使用attr方法。

在jQuery 1.6及以后版本中,获取和设置disabled、selected、checked这些属性时,应该使用prop()方法,不要使用attr()方法!!能够用prop()操作的尽量用prop()操作,不要用attr()操作。

猜你喜欢

转载自blog.csdn.net/shixinbing/article/details/82143709
今日推荐