如何使用jQuery对象作为委托方法的参数

时间:2011-09-21 18:52:48

标签: javascript jquery events dom selector

使用以下代码与委托一起使用多个选择器:

$(contextElement).delegate('selector1, selector2' , 'eventName', function(){ //blabla });

在管理DOM元素变得至关重要的大型项目中,将元素存储在绑定到窗口对象的变量中成为一种有吸引力的工作方式。

但是我无法加入这种在委托方法上使用多个选择器的方式:

window.someControl = {
     contextElement = $('selector0'),
     DOMasProperty1 = $('selector1'),
     DOMasProperty2 = $('selector2')
}

someControl.contextElement.delegate(
'you magic answer for using DOMasProperty1 
and DOMasProperty2', 
'click', 
function(){ 

  //blabla 

});

注意:我知道选择器的字符串值与其jQuery对象相反,可以存储在someControl对象中。但是我存储jQuery对象以提高代码的性能,而只是一遍又一遍地调用字符串值将使这种工作方式与使用方法的选择器名称没有区别。

我需要一个答案,以某种方式结合使用委托和减少DOM查找

2 个答案:

答案 0 :(得分:2)

jQuery对象具有.selector属性,该属性将引用您的原始选择器。

someControl.contextElement.delegate(
    window.someControl.DOMasProperty1.selector + ',' + 
    window.someControl.DOMasProperty2.selector,
    'click', 
    function(){ 

          //blabla 

    });

请注意,它适用于:

DOMasProperty1 = $('selector1'),

...但如果包含DOM遍历方法,可能不会:

DOMasProperty1 = $('selector1').parent(),

答案 1 :(得分:1)

我对你的问题并不完全明确,但我可能会这样做:

window.someControl = {
    contextElement: $('selector0'),
    selectors: ['selector1', 'selector2']
}

someControl.contextElement.delegate(someControl.selectors.join(','), 'click', function(){ 
    // …
});

请注意,创建对象JavaScript的语法如下所示:

{
    key: value
}

喜欢这样:

{
    key = value
}