JQuery 1.6中removeProp和removeAttr有什么区别?

如果你删除了一些你应该使用removeAttr的东西,它会无声地失败吗? 它会起作用吗? 它会实际删除整个属性还是只删除其中的值?

如果使用prop()添加’checked’,是否可以使用removeAttr删除它?

许多问题!

元素的属性类似于“类”。 而它的属性将是’className’。

这就是将jQuery.prop和jQuery.propHooks添加到1.6版本中的原因,以便更轻松地使用它们。

因此,如果属性与属性具有相同的名称,则可以使用removeProp或removeAttr。

我在jQuery论坛上问了一个类似的问题,得到了这个答案:

是的,attr是指html属性,因为它们是严格定义的。 道具是属性的。 例如,假设您有一个节点elem,类为“something”(原始元素不是jQuery对象)。 elem.className是属性,但是属性所在的位置。 更改class属性也会自动更改属性,反之亦然。 目前,attr是混乱和混乱的,因为它已经尝试了两个function的工作,并且因此存在许多错误。 jQuery.fn.prop的引入将解决几个拦截器,它应该从开头分离出来的单独代码,并为开发人员提供更快的function来完成他们期望他们做的事情。 让我在一秒钟内构成一个百分比,并说根据我在支持IRC和阅读其他代码的经验,attr的95%用例不必转换为prop。

编辑

最好坚持使用jQuery.attr或jQuery.prop。 在使用两者设置和删除checked属性时,似乎有些奇怪的行为。

请看这里的例子: http : //jsfiddle.net/tomgrohl/uTCJF/

1.6中有一个与选择的错误: http : //bugs.jquery.com/ticket/9079

官方jQuery博客提供了一个非常明确的解释:

在1.6版本中,我们将DOM属性和DOM属性的处理拆分为单独的方法。 新的.prop()方法设置或获取DOM元素的属性,而.removeProp()删除属性。 在过去,jQuery没有在属性和属性之间划清界限。 通常,DOM属性表示从文档中检索的DOM信息的状态,例如标记中的value属性。 DOM属性表示文档的动态状态; 例如,如果用户单击上面的输入元素并键入def,则.prop("value")为abcdef,但.attr("value")仍为abc。

在大多数情况下,浏览器将属性值视为属性的起始值,但是诸如checked或disabled之类的布尔属性具有exception语义。

例如,考虑标记 。 checked属性的存在意味着DOM .checked属性为true,即使该属性没有值。 在上面的代码中,checked属性值为空字符串(如果未指定任何属性,则为undefined ),但checked属性值为true

在jQuery 1.6之前, .attr("checked")返回了布尔属性值( true ),但是从jQuery 1.6开始,它返回属性的实际值(空字符串),当用户单击复选框时,它不会更改改变它的状态。

有几种方法可以检查复选框的当前检查状态。 最好和最this.checked是直接使用DOM属性,就像在事件处理程序中的this.checked引用单击的元素一样。 在使用jQuery 1.6或更新版本的代码中,新方法$(this).prop("checked")检索与this.checked相同的值并且相对较快。 最后,表达式$(this).is(":checked")适用于所有版本的jQuery。

使用jQuery 1.6,我试图克隆一个具有多个id属性的菜单项,所以我这样做了:

$('ul.menu').clone().filter('*').removeProp('id').appendTo('.sidebar');

当我在Firebug中检查元素时,我有很多id="undefined" – 不是我想要的。 所以现在我正在使用removeAttr ,它似乎工作得更好。

$('ul.menu').clone().filter('*').removeAttr('id').appendTo('.sidebar');