$。在IE8中扩展一个jQuery对象

时间:2012-11-12 00:18:47

标签: javascript jquery jquery-ui-widget-factory

在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() {}
});

The working jsfiddle

如上所述,此代码适用于所有主要浏览器,但 IE8除外。基本上它会返回this.element2.next().css().show()行的错误消息:

  

对象不支持此属性或方法

它引用的属性/方法是jQuery方法next(),css()和show()

看起来好像在IE8中this.element2已经丢失了它的jQuery上下文,因为如果我将对象包装在jQuery函数中,那么:this.element2 = $(this.element2);一切都很好。

The IE8 compatible jsfiddle

所以问题是,这里发生了什么?这是IE8的标准行为还是我以编程方式错误地接近了这种情况?

1 个答案:

答案 0 :(得分:1)

如果您的目的只是创建一个包含相同元素的单独jQuery对象,那么如何:

this.element2 = $( this.element[0] );