Javascript 在jQueryUi小部件中是否有获取内部属性的默认方法?

Javascript 在jQueryUi小部件中是否有获取内部属性的默认方法?,javascript,jquery,jquery-ui,scope,Javascript,Jquery,Jquery Ui,Scope,Im使用jQueryUILabs调用选择菜单中的现有小部件。它具有关闭和打开事件的回调选项。问题是,在这些事件中,我需要设置一个节点的动画,该节点是小部件的一部分,但不是它所连接的对象。为此,我需要访问此节点 例如,如果我要实际修改小部件代码本身: // ... other methods/properties "open" : function(event){ // ... the original logic // this is my animation $(t

Im使用jQueryUILabs调用选择菜单中的现有小部件。它具有关闭和打开事件的回调选项。问题是,在这些事件中,我需要设置一个节点的动画,该节点是小部件的一部分,但不是它所连接的对象。为此,我需要访问此节点

例如,如果我要实际修改小部件代码本身:

// ... other methods/properties

"open" : function(event){
    // ... the original logic

    // this is my animation
    $(this.list).slideUp('slow'); 

    // this is the orginal call to _trigger
    this._trigger('open', event, $this._uiHash());
},

// ... other methods/properties
然而,当我在事件处理程序的作用域中附加
时,这个
就是我调用小部件的原始元素。我需要小部件实例或小部件实例的
list
属性

$('select#custom').selectmenu({
    'open': function(){
       // in this scope `this` is an HTMLSelectElement not the ui widget
     }
});
从小部件获取
列表
属性的最佳方法是什么


编辑:注意,我在下面发布了我的最终解决方案。但是,我不喜欢返回DOM来获取元素,因此,我仍然有兴趣了解覆盖/扩展现有小部件或特定内部构件的最佳实践。

因此,最后我似乎忽略了列表中基于插件名称和原始元素id分配id的内容。因此,以下方法有效:

jQuery(function(){
    jQuery('select#custom').selectmenu({
        width: 100, 
        'style': 'dropdown',
        "open": function(e, data){
            var menu = jQuery('ul#'+$(this).attr('id')+'-menu');
            menu.hide().slideDown('slow');
        },
        "close": function(e, data){
            var menu = $('ul#'+jQuery(this).attr('id')+'-menu');
            menu.addClass('ui-selectmenu-open').slideUp('slow', function(){
                menu.removeClass('ui-selectmenu-open');
            });

        },
        "change": function(){window.location = $(this).val();}
    });
});

因此,最后我似乎忽略了列表根据插件名称和原始元素id分配id的内容。因此,以下内容有效:

jQuery(function(){
    jQuery('select#custom').selectmenu({
        width: 100, 
        'style': 'dropdown',
        "open": function(e, data){
            var menu = jQuery('ul#'+$(this).attr('id')+'-menu');
            menu.hide().slideDown('slow');
        },
        "close": function(e, data){
            var menu = $('ul#'+jQuery(this).attr('id')+'-menu');
            menu.addClass('ui-selectmenu-open').slideUp('slow', function(){
                menu.removeClass('ui-selectmenu-open');
            });

        },
        "change": function(){window.location = $(this).val();}
    });
});

.list是类的名称吗?否,
list
是一个
ul
元素,小部件使用它来模拟标准
select
标记中的选项下拉列表。此外,我无法通过选择器选择此选项,因为我可能在一个页面上有多个选项,并且它们不会具有仅id的类。您是否尝试过:$(this)。查找('ul')。slideUp('slow')而不必:$(this.list)。slideUp('slow')@val:但是所讨论的
ul
这个
引用的select元素没有任何关系,这就是问题所在,我需要一个列表引用,我无法将它从dom中拉出,因为没有可靠的方法。@val:实际上我收回了它。。。它在widget类的基础上添加了一个我以前错过的ID。我可以在上面使用一个标准选择器。列表是一个类的名称吗?不,
list
是一个
ul
元素,小部件使用它来模拟标准
select
标记中的选项下拉列表。此外,我无法通过选择器选择此选项,因为我可能在一个页面上有多个选项,并且它们不会具有仅id的类。您是否尝试过:$(this)。查找('ul')。slideUp('slow')而不必:$(this.list)。slideUp('slow')@val:但是所讨论的
ul
这个
引用的select元素没有任何关系,这就是问题所在,我需要一个列表引用,我无法将它从dom中拉出,因为没有可靠的方法。@val:实际上我收回了它。。。它在widget类的基础上添加了一个我以前错过的ID。我可以用一个标准的选择器。