jQuery中的.removeProp()是否存在错误,或者我是否做错了什么?

jQuery中的.removeProp()是否存在错误,或者我是否做错了什么?,jquery,Jquery,列表框中选定的项目将显示在下面的UL中。单击UL中的项目,它将从列表框中删除该项目,并从UL中删除自身 复制错误: 在列表框中选择一个项目 单击UL中的该项,它将消失,列表框将显示为未选中 单击列表框中的同一项 请注意,事件已激发,但未添加该项 现在执行相同的步骤,除了使用.prop('selected','')而不是.removeProp('selected'):您需要知道的一切都是 对于DOM元素或窗口对象的某些内置属性,如果试图删除该属性,浏览器可能会生成错误。jQuery首先将未定义

列表框中选定的项目将显示在下面的UL中。单击UL中的项目,它将从列表框中删除该项目,并从UL中删除自身

复制错误:

  • 在列表框中选择一个项目
  • 单击UL中的该项,它将消失,列表框将显示为未选中
  • 单击列表框中的同一项
请注意,事件已激发,但未添加该项


现在执行相同的步骤,除了使用.prop('selected','')而不是.removeProp('selected'):

您需要知道的一切都是

对于DOM元素或窗口对象的某些内置属性,如果试图删除该属性,浏览器可能会生成错误。jQuery首先将未定义的值指定给属性,并忽略浏览器生成的任何错误。通常,只需要删除已在对象上设置的自定义属性,而不需要删除内置(本机)属性

注意:不要使用此方法删除本机属性,例如选中、禁用或选中的属性。这将完全删除该属性,一旦删除,就不能再次添加到元素中。使用
.prop()
将这些属性改为
false


您应该使用
removeAttr()

$('myele').attr('selected');//-->


$('myele').removeAttr('selected');//-->

我认为您混淆了html属性和DOM属性。我想不出你为什么要删除“selected”属性。只需将其设置为false:

$('ul').on('click', 'li', function() {
    $('option[value="' + $(this).text() + '"]').get(0).selected = false;
    $(this).remove();
});

编辑:Grr,我以为那些JSFIDLE是只读的-(

我猜
prop
是直接的对象属性,不同于
attr
,它处理元素属性。不是吗?使用
removeAttr
会破坏我的整个代码。。当没有属性的时候,你有没有可能做不到
removeAttr
?就像removeClass不关心是否没有类一样,他只会忽略它。这是对于这类事情,通常建议始终使用prop而不是attr:有趣。使用较旧版本的jQuery,一旦升级,它就不起作用了。我想较新版本只是为了防止您提到的问题。