如果你删除某些东西,你应该使用removeAttr,它会无声地失败吗?它会起作用吗?它实际上会删除整个属性还是只删除其中的值?
如果使用prop()添加'checked',是否可以使用removeAttr删除它?
很多问题!
答案 0 :(得分:7)
official jQuery blog提供了非常明确的解释:
在1.6版本中我们分开了 处理DOM属性和DOM 属性分为单独的方法。该 新的.prop()方法设置或获取 DOM元素的属性,和 .removeProp()删除属性。在 过去,jQuery还没有说清楚 属性和。之间的界限 属性。通常,DOM属性 表示DOM信息的状态 从文档中检索出来的 作为标记中的value属性 。 DOM 属性表示动态 该文件;例如,如果 用户点击上面的输入元素 和类型def
.prop("value")
是 abcdef但.attr("value")
仍然存在 ABC在大多数情况下,浏览器会对待 属性值作为起始值 对于属性,但布尔值 属性,如已选中或已禁用 有不同寻常的语义。
例如,考虑标记
<input type="checkbox" checked>
。该 存在已检查的属性 表示DOM.checked
属性 是的,即使是属性 没有价值。在代码中 上面,检查的属性值是 空字符串(如果没有,则为undefined
属性已指定)但是 已检查的属性值为true
。在jQuery 1.6之前,
.attr("checked")
返回了Boolean属性值 (true
)但是从jQuery 1.6开始它返回 属性的实际值(an 空字符串),不会改变 当用户单击复选框时 改变它的状态。有几种选择 检查当前检查的状态 一个复选框。最好也是最好的 performant是使用DOM属性 直接,如在
this.checked
里面 这引用时的事件处理程序 被点击的元素。在代码中 使用jQuery 1.6或更新版本的新版本 方法$(this).prop("checked")
检索与...相同的值this.checked
并且相对较快。 最后,表达$(this).is(":checked")
适用于所有人 jQuery的版本。
答案 1 :(得分:4)
元素的属性类似于“类”。而它的财产将是'className'。
这就是将jQuery.prop和jQuery.propHooks添加到1.6版本中的原因,以便更轻松地使用它们。
因此,如果该属性与该属性具有相同的名称,则可以同时使用removeProp或removeAttr。
我在jQuery论坛上问了一个类似的问题,得到了这个答案:
是的,attr适用于html属性 因为它们是严格定义的。道具是 对于属性。例如,比如说 你有一个节点elem与类 “某事”(原始元素不是jQuery 宾语)。 elem.className是 财产,但是在哪里 属性驻留。改变班级 属性也会更改属性 自动反之亦然。 目前,attr是乱七八糟的 令人困惑,因为它已经尝试过 这两个职能的工作都有 因为这个很多错误。该 jQuery.fn.prop的介绍会 解决几个拦截器,单独的代码 因为它本应该被分开 一开始,给开发者 更快的功能来做他们的事 期待他们这样做。我来弥补一个 一秒钟的百分比,并说来自 我在支持IRC和支持方面的经验 阅读其他代码,95%的使用 attr的情况不必切换 支持。
修改强>
最好坚持使用jQuery.attr或jQuery.prop。当使用两者设置和删除checked属性时,似乎有些奇怪的行为。
请点击此处查看示例:http://jsfiddle.net/tomgrohl/uTCJF/
1.6中存在与选定内容相关的错误:http://bugs.jquery.com/ticket/9079
答案 2 :(得分:0)
使用jQuery 1.6,我试图克隆一个具有多个id
属性的菜单项,所以我这样做了:
$('ul.menu').clone().filter('*').removeProp('id').appendTo('.sidebar');
当我检查Firebug中的元素时,我有很多id="undefined"
- 而不是我想要的。所以现在我正在使用removeAttr
,它似乎工作得更好。
$('ul.menu').clone().filter('*').removeAttr('id').appendTo('.sidebar');