在Widget Factory中的jQuery对象上使用$ .extend时,IE8似乎丢失了新创建的对象上的jQuery上下文。让我演示一下。
以下代码适用于IE9 +,Chrome,FireFox
$.widget("a07.Wooh", {
options: {
test: "Awesome"
},
_testFunc: function() {
// Perform some operations on the DOM using this.element jQuery Object
this.element.after("<div class=\"stuff\">Some cool stuff</div>").next().hide();
},
_testFunc2: function() {
//Copy the this.element object
this.element2 = $.extend({}, this.element);
//Perform some operations on the DOM using this.element2 jQuery Object
this.element2.next().css('color', 'red').show();
},
_create: function() {
this._testFunc();
this._testFunc2();
},
_init: function() {}
});
如上所述,此代码适用于所有主要浏览器,但 IE8除外。基本上它会返回this.element2.next().css().show()
行的错误消息:
对象不支持此属性或方法
它引用的属性/方法是jQuery方法next(),css()和show()
看起来好像在IE8中this.element2已经丢失了它的jQuery上下文,因为如果我将对象包装在jQuery函数中,那么:this.element2 = $(this.element2);
一切都很好。
所以问题是,这里发生了什么?这是IE8的标准行为还是我以编程方式错误地接近了这种情况?
答案 0 :(得分:1)
如果您的目的只是创建一个包含相同元素的单独jQuery对象,那么如何:
this.element2 = $( this.element[0] );