启动你的firebug控制台并试一试.
比较一下:
$('body').data('x',1); $(thisx).remove(); console.log($('body').data('x'));
对此:
$('body').data('x',1); $(this.x).remove(); console.log($('body').data('x'));
请注意区别?如果thisx
未定义,它将立即抛出引用错误.如果x
是未定义的属性this
,jQuery将返回文档,因为它的结果集.接下来jQuery将尝试删除您的文档(它不能),但在此之前它将删除附加到文档的任何子元素的所有数据.因此,擦除您的数据存储.
注意:this
可以是任何元素引用或对象.您只需要让jQuery尝试访问未定义的属性.
(谈论一个痛苦.它无声地失败,我正在试图找出为什么我的数据突然丢失.我追踪到一个特殊情况,在特定情况下元素引用未定义.)
关于我的问题:
1)在我提交错误报告之前,我是否正确分析了这个问题?如果有人碰巧知道这是一个已知问题,请告诉我.我在bug跟踪器中找不到它,但界面不是很好(或者我错了).
2)为什么最终会有任何差异?我猜thisx
是立即评估导致异常,this.x
而是在被调用函数中传递和计算的引用,对吧?(我认为这条线selector = selector || document
;是罪魁祸首.
3)如何处理这个问题的建议?我想我应该检查对象的任何/每个元素引用或属性(例如存储的选择器字符串)是否在我删除之前将其传递给jQuery之前定义.