jquery中prop()和attr()之间有什么区别?

1、操作对象不同

很明显,attr和prop分别是单词attribute和property的缩写,并且它们均表示"属性"的意思。

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

<!-- 这里的id、class、data_id均是该元素文档节点的attribute -->
<div id="message" class="test" data_id="123"></div>

<script type="text/javascript">
// 这里的name、age是Person的property
var Person = { name: "小明", age: 18};
</script>

在jQuery中,prop()函数的设计目标是用于设置或获取指定DOM元素(指的是JS对象,Element类型)上的属性(property);attr()函数的设计目标是用于设置或获取指定DOM元素所对应的文档节点上的属性(attribute)。

2、应用版本不同

attr()是jQuery 1.0版本就有的函数,prop()是jQuery 1.6版本新增的函数。毫无疑问,在1.6之前,你只能使用attr()函数;1.6及以后版本,你可以根据实际需要选择对应的函数。

3、用于设置的属性值类型不同

由于attr()函数操作的是文档节点的属性,因此设置的属性值只能是字符串类型,如果不是字符串类型,也会调用其toString()方法,将其转为字符串类型。

prop()函数操作的是JS对象的属性,因此设置的属性值可以为包括数组和对象在内的任意类型。

4、其他细节问题

在jQuery 1.6之前,只有attr()函数可用,该函数不仅承担了attribute的设置和获取工作,还同时承担了property的设置和获取工作。例如:在jQuery 1.6之前,attr()也可以设置或获取tagName、className、nodeName、nodeType等DOM元素的property。

直到jQuery 1.6新增prop()函数,并用来承担property的设置或获取工作之后,attr()才只用来负责attribute的设置和获取工作。

此外,对于表单元素的checked、selected、disabled等属性,在jQuery 1.6之前,attr()获取这些属性的返回值为Boolean类型:如果被选中(或禁用)就返回true,否则返回false。

但是从1.6开始,使用attr()获取这些属性的返回值为String类型,如果被选中(或禁用)就返回checked、selected或disabled,否则(即元素节点没有该属性)返回undefined。并且,在某些版本中,这些属性值表示文档加载时的初始状态值,即使之后更改了这些元素的选中(或禁用)状态,对应的属性值也不会发生改变。

因为jQuery认为:attribute的checked、selected、disabled就是表示该属性初始状态的值,property的checked、selected、disabled才表示该属性实时状态的值(值为true或false)。

因此,在jQuery 1.6及以后版本中,请使用prop()函数来设置或获取checked、selected、disabled等属性。对于其它能够用prop()实现的操作,也尽量使用prop()函数。

<button>按钮</button>
    <input type="checkbox" name="" id="" checked="checked">
    <script src="jquery.js"></script>
    <script>
        // $('button').on('click',function(){

        // });
        // var r = $('input');
        $('button').on('click',function(){
            console.log(11)
            if ($('input').prop('checked')) {
                $('input').prop('checked',false);
            }else{
                $('input').prop('checked',true);
            }
        })
    </script>

// attr / prop
// attr ==> getAttribute() / setAttribute()
// 用于操作 自定义的属性,对于DOM对象自身的布尔值类型的属性,只能
// 通过这个两个方法来设置或者读取默认值,而不能动态改变值
//
// prop ==> dom.checked = true;
// 对于 布尔值的属性(selected/checked/diabled) 都需要通过直接访问属性
// 方式来操作(点语法、[])

大家都知道原生js可以获取匹配元素的内部html和外部html,内部是innerHTML,外部是outerHTML,原生js的dom对象是存在这两个属性的,

document.getElementById("linkType").outerHTML;

如果用jQuery如何获取匹配元素(包括自身元素的html)呢?

既然存在这个属性,我们就可以用$("#linkType").prop("outerHTML")来获取;

可以通过$("#linkType").prop("outerHTML",outerHTML)赋值来改变outerHTML的内容;

值得注意的是jQuery的attr是获取不到这个属性值的。

Image placeholder
前端答疑
未设置
  22人点赞

没有讨论,发表一下自己的看法吧

推荐文章
jquery中$和$()之间有什么区别?

$就是jQuery的别称而jQuery就是jQuery库提供的一个函数。这个函数的作用是根据()里的参数进行查找和选择html文档中的元素,函数作用之一就是GetElementByID的代替,但()内

jquery中on和bind之间有什么区别?

bind方法与on方法都是事件绑定,但是两者却又有着一个大区别:事件冒泡(事件代理);jquery文档中bind和on函数绑定事件的用法:.bind(events[,eventData],handle

vue和jquery之间有什么区别?

首先我们来了解一下jquery和vue是什么?Vue是什么?Vue.js是一个前端JavaScript框架,用于构建用户界面。它是开源的。当使用其他JavaScript库时,它还可以用作集成工具。它本

jquery和js之间有什么区别?

js是一种脚本语言,常用于网页客户端编程,使网页在客户端浏览器中,实现更多地动态功能,表现出更加丰富的视觉效果。jQuery是一个简洁而快速的JavaScript库,可用于简化事件处理,HTML文档遍

jquery on()与click()之间有什么区别?

jqueryon()与click()的区别click()属于静态加载,当页面加载完,就不在为新增加的元素添加点击事件。on()属于动态加载,当页面加载完,可以为新增加的元素添加事件。但是必须选定负级元

angular和vue之间有什么区别?

相同:1.数据绑定:vue和angular绑定都可以用{{}}2.都支持内置指令和自定义指令3.都支持内置过滤器和自定义过滤器。区别:1.学习成本和API设计:vue相比于angular来说更加的简单

jQuery中attr()和prop()的区别?

attr():attr()方法设置或返回被选元素的属性和值。当该方法用于返回属性值,则返回第一个匹配元素的值。当该方法用于设置属性值,则为匹配元素设置一个或多个属性/值对。prop():prop()方

jquery中prop()怎么用?

使用此方法返回属性值时,将返回第一个匹配元素的值;使用此方法设置属性值时,将为选定元素设置一个或多个属性。注意:prop()方法应该用于检索属性值,例如DOM属性(如selectedIndex,tag

jsp和html之间有什么区别?

HTML(HypertextMarkupLanguage)文本标记语言,它是静态页面,和JavaScript一样解释性语言,为什么说是解释性语言呢?因为,只要你有一个浏览器那么它就可以正常显示出来,而

jquery中attr和prop的区别是什么?

在jQuery中,attr()函数和prop()函数都用于设置或获取指定的属性,它们的参数和用法也几乎完全相同。但不得不说的是,这两个函数的用处却并不相同。下面我们来详细介绍这两个函数之间的区别。jq

jquery和jquery ui的区别?

jquery和jqueryui的区别?区别有:1、jQuery是一个js库,主要提供的功能是选择器,属性修改和事件绑定等等。 2、jQueryUI则是在jQuery的基础上,利用jQuery的扩展性,

jQuery中this和$(this)的区别是什么?

jQuery中this和$(this)的区别是什么?●$(this)相当于jQuery(this),是一个jQuery对象,只能使用jQuery的属性和方法;●this中存放的是DOM元素,属于jav

jquery中on()和click()的区别是什么?

on()和click()的区别:click()属于静态加载,当页面加载完,就不在为新增加的元素添加点击事件。on()属于动态加载,当页面加载完,可以为新增加的元素添加事件。但是必须选定负级元素。二者在

jquery中bind与on的区别是什么?

jquery中bind与on的区别bind和on都是事件绑定,都是给元素绑定事件用的,但是两者却又有着一个大区别:事件冒泡(事件代理)。事件冒泡也是委托事件的原型,事件委托就是子类的事情委托给父类的去

jquery中children()和find()的区别是什么?

jquery中children()和find()的区别children(selector)方法是返回匹配元素集合中每个元素的所有子元素(仅儿子辈)。参数可选,添加参数表示通过选择器进行过滤,对元素进行

jquery中size()与length的区别是什么?

jQuerylength和size()区别length是属性,size()是方法。如果你只是想获取元素的个数,两者效果一样既("img").length和("img").size()获取的值是一样的。

Java和C语言有什么区别?学哪个语言好就业?

Java和C语言都是现阶段IT行业,说起它们之间的区别还是相当大的。许多编程语言的初学者在学习初期,都会遇到这样的问题,Java和C语言学哪个语言好就业?其实只要你学好其中随意一门,就业就都不会有太大

云原生存储和云存储有什么区别?

作者| 李鹏(壮怀)阿里云智能事业群高级技术专家导读:新的企业负载/智能工作负载容器化、迁云、存储方面遇到的性能、弹性、高可用、加密、隔离、可观测性以及生命周期等方面的问题,不但需要存储产品层次的改进

jquery text() val() html()之间的区别是什么?

jquerytext()val()html()之间的区别是什么?●text()获取元素内的文本,相当于js中的innerText●val()获取表单元素的值,相当于js中的input.value●ht

innerHTML与jquery里的html()区别?

innerHTML与jquery里的html()区别?●html()可以设置tbody、tr这些只读标签,而innerHTML在低版本IE下不行;jQuery的html()做了些容错处理,原生的Dom

jquery中deferred对象是什么?

jquery中deferred对象是什么?Deferred是JQuery的一个延迟对象,意思是函数延迟到某个点才开始执行,改变执行状态的方法有两个(成功:resolve和失败:reject),分别对应

jquery中slider是什么?

slider(滑块)是jqueryUI中的一个小插件。jQueryUI滑块(Slider)插件允许通过滑块进行选择。有各种不同的选项,比如多个手柄和范围。手柄可通过鼠标或箭头按键进行移动。滑块部件(S

jquery变量加$和不加$的区别?

jquery变量加$和不加$的区别?加$和不加$没有区别,因为它们都是jquery变量。一般在给jquery对象取名的时候在前面加$。一看就知道是jquery对象。变量命名规则中起始字符可以是:●字母

jquery ui和easyui区别?

jqueryui和easyui区别?●jqueryui是jQuery插件,是由jQuery官方维护的UI方向的插件●easyui也是jQuery插件,是第三方维护的插件●jqueryui是免费的界面库

jQuery中#是什么意思?

jQuery中#是什么意思?#是jquery选择器的一种形式,匹配任意html中id的对象。$("#idvalue"):这个代码选中html文档中,即;jQuery元素选择器和属性选择器允许您通过标签