获取与jquery

问题描述:

选择元素下我有一个选择,我得到的是第一个元素:获取与jquery

$("#MyControl")[0] 

是否有可能获得比访问像一个数组中的元素之外的功能的元件?

我想要做的就是将这个元素传递给一个带有.call()的函数来定义上下文。

下面是一个例子:

$(document).ready(function() { 
    $(document).on("change", "#MyControl", setActivityControlsState); 
}); 

setActivityControlsState: function() { 
    var selector = "#automaticActivityCreation"; 

    if ($(selector).length > 0) { 
     if ($.isNumeric(this.value) && this.value > 0) 
      $(selector).show(); 
     else 
      $(selector).hide(); 
    } 
} 

referenceFormOnSuccess: function (data) { 
    setActivityControlsState.call($("#MyControl")[0]); 
} 

正如你可以在refreshFormOnSuccess功能看,我必须界定 '本' 与$( “#MyControl”)[0]。

我只想知道是否有更好的方法来做到这一点。

请注意,我不想要的东西,如$来访问我的控件的值(本).VAL()

+1

http://api.jquery.com/get/ - 两个选项都做同样的事情,没有一个比另一个更好 – n*s 2012-08-10 20:34:16

+0

这里有什么问题? 'setActivityControlsState.call($(“#MyControl”)[0]);'工作正常。 – 2012-08-10 20:36:37

+0

或者你也可以使用'$(“#MyControl:eq(0)”)' – redDevil 2012-08-10 20:38:50

我建议一个小的重新构造,其减轻这种需要:

$(document).ready(function() { 
    $(document).on("change", "#MyControl", setActivityControlsState); 
}); 

setActivityControlsState: function() { 
    // cache jquery object instead of just the selector 
    // for better memory management 
    var automaticActivityCreation = $("#automaticActivityCreation"); 

    if (automaticActivityCreation.length > 0) { 
     if ($.isNumeric(this.value) && this.value > 0) 
      automaticActivityCreation.show(); 
     else 
      automaticActivityCreation.hide(); 
    } 
} 

referenceFormOnSuccess: function (data) { 
    // fire the change event which will tap 
    // the listener you set up in .ready 
    $("#MyControl").trigger('change'); 
} 

,但如果你真的想要得到与jQuery的对象,你确实有一些选择:

// jQuery select #MyControl and get as dom element with array 
$("#MyControl")[0] 

// jQuery select #MyControl and get as dom element with .get 
$("#MyControl").get(0) 

而是因为你正在使用一个电子字元素有ID,你只可以使用一个ID在同一时间,你真的不需要jQuery的这个

document.getElementById('MyControl') 

referenceFormOnSuccess: function (data) { 
    setActivityControlsState.call(document.getElementById('MyControl')); 
} 
+0

'$(“#MyControl”).get()'返回将jQuery对象转换为普通数组。 – 2012-08-10 21:01:43

+0

啊,我的坏。编辑。 – Fresheyeball 2012-08-10 21:43:04

+0

@Fresheyeball:非常感谢。这正是我所说的:一个很好的答案。我将使用get而不是brakets来访问第一个元素。 – Samuel 2012-08-10 21:56:45