5

据我所知, .prop() 函数可以做 .attr() 函数可以做的所有事情,但通常以一种更安全、更简单的方式。

例如:

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

有没有我需要使用的用例,.attr()或者该.prop()功能不会给我所需的信息?

编辑:.prop()这个问题与和之间的区别无关.attr()。我已经深入研究了 StackOverflow 上的这些问题,包括下面链接的问题 ( stackoverflow.com/questions/5874652/prop-vs-attr )。从我的问题来看,很明显我完全理解两者之间的区别,可能比大多数人更好。我的问题是在任何情况下我必须使用 .attr(),这是与 .prop() 与 .attr() 完全不同的问题。

4

1 回答 1

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

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

.attr() 在内部调用 .prop(),因此 .attr() 方法将比直接通过 .prop() 访问它们稍慢。

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

检查此链接

于 2016-07-31T13:43:09.940 回答