我在网上找不到完整的列表。每个人都只是复制了jQuery 1.6博客文章中给出的部分列表。关于#3,Starx在他的评论中解决了这个问题。
http://timmywillison.com/提供了更好的细节和适当的讨论。MDN和W3C规范还提到,有各种接口可以将属性设置为属性(
https://developer.mozilla.org/en/DOM/element),尽管MDN实际上没有列出它们是哪些。MDN提到,使用属性接口作为设置器比使用getAttribute更脆弱:
"虽然这些接口通常由大多数HTML和XML元素共享,但DOM HTML规范列出了更专业的特定对象的接口。请注意,这些HTML接口仅适用于[HTML 4.01]和[XHTML 1.0]文档,并不能保证与任何未来版本的XHTML一起使用。" HTML 5草案确实旨在向后兼容这些HTML接口,但是它们被认为是“已弃用、支持不佳、很少使用或被认为是不必要的某些功能已被删除”。可以通过完全转向DOM XML属性方法(例如getAttribute())来避免潜在冲突。"
"然而,目前似乎可以安全地假设,在Firefox和Chrome中呈现的任何HTML5 doctype页面已经处于已删除“已弃用、支持不佳”等接口的环境中。"
"因此,我已经针对每种HTML元素类型使用布尔值、字符串和整数值测试了每个属性以及jQuery博客中提到的非属性属性。"
"无论您调用.prop()还是attr(),在1.7.2和1.8pre中,jQuery内部始终会实际使用.prop来:"
async, autofocus, autoplay, checked, controls, defer, disabled, hidden, loop,
multiple, open, readonly, required, scoped, selected
对于HTML元素(不考虑window、document等),除非使用.attr(),否则jQuery不会设置以下任何属性:
accept-charset, accesskey, bgcolor, buffered, codebase, contextmenu, datetime,
default, dirname, dropzone, form, http-equiv, icon, ismap, itemprop, kind,
language, list, location, manifest, nodeName, nodeType, novalidate, pubdate,
radiogroup, seamless, selectedIndex, sizes, srclang, style, tagName
最后,jQuery将使用.prop()或.attr()设置以下属性列表。在上面的第一个列表中,无论您使用.attr()还是.prop(),jQuery始终使用.prop()。对于此列表中的属性,jQuery使用您使用的任何方法。如果您使用.prop(),jQuery使用.prop(),反之亦然。无论哪种情况,结果都是相同的。因此,忽略任何潜在的语义考虑,仅考虑.prop()比.attr()快约2.5倍,jQuery 1.6.1博客文章建议使用.attr(),但可以改用.prop(),以显著提高性能:
accept, action, align, alt, autocomplete, border, challenge, charset, cite,
class, code, color, cols, colspan, contenteditable, coords, data, defaultValue,
dir, draggable, enctype, for, headers, height, hidden, high, href, hreflang,
id, keytype, label, lang, low, max, maxlength, media, method, min, name,
optimum, pattern, ping, placeholder, poster, preload, readonly, rel, required,
reversed, rows, rowspan, sandbox, scope, shape, size, span, spellcheck, src,
srcdoc, start, step, summary, tabindex, target, title, type, usemap, value,
width, wrap