有什么情况我必须使用.attr()over .prop()吗?

时间:2015-08-06 19:08:41

标签: javascript jquery attributes attr prop

据我所知,.prop()函数可以执行.attr()函数可以执行的所有操作,但通常更安全,更简单。

例如:

  • 如果我想获取HTML中复选框的默认状态,我可以$('myCheckbox').prop('defaultChecked')(而不是$('myCheckbox').attr('checked'))。 这实际上似乎比使用.attr('checked')更安全,因为如果动态更改复选框,属性可能会丢失它的值,而.prop('defaultValue')维护值(例如http://jsfiddle.net/p1Lrgwnb/1/
  • 尽管我经常看到.attr()与StackOverflow示例中的idname等值一致使用.prop(),但.attr()也可以正常使用。除了传统的惯例和习惯之外,我不知道.attr()似乎更喜欢这些价值观。

是否有一个用例我需要使用.prop().prop()函数不能提供我需要的信息?

编辑:此问题与.attr() ren.label('message', 10, 10) .attr({ fill: 'red', stroke: 'white', 'stroke-width': 2, padding: 5, cursor: 'pointer', r: 5 }) .css({ color: 'white', width: '100px' }) // action on click .on('click', function () { }); 之间的区别无关。我已经深入研究了StackOverflow上的这些问题,包括下面链接的问题(stackoverflow.com/questions/5874652/prop-vs-attr)。从我的问题来看,很明显我完全理解两者之间的差异,可能比大多数人更好。我的问题是,我必须使用.attr(),这是一个完全不同的问题,来自.prop()vs .attr()。

1 个答案:

答案 0 :(得分:3)

<input id="check1" checked="checked" type="checkbox" />
.attr('checked') //returns  checked
.prop('checked') //returns  true
.is(':checked') //returns true

prop方法返回checked,selected,disabled,readOnly..etc的布尔值,而attr返回已定义的字符串。因此,您可以在if条件下直接使用.prop('checked')。

.attr()在内部调用.prop(),所以.attr()方法比直接通过.prop()访问它们要慢一些。

对于jQuery 1.6+,将主要使用prop,因为它比attr简单且宽泛。在大多数旧项目中,attr用于获取元素的当前状态信息。但是现在道具已经接受了这项工作,而attr将被替换为道具。

Check this link