使用jquery在选择器下获取元素

时间:2012-08-10 20:33:28

标签: javascript jquery jquery-selectors

我有一个选择器,我得到第一个这样的元素:

$("#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]定义'this'。

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

请注意,我不想使用$(this).val()

之类的东西来访问我的控件的值

1 个答案:

答案 0 :(得分:3)

我可以建议一个小型的重组,以减轻这种需求:

$(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'));
}