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

Get element under a selector with jquery

本文关键字:获取 元素 选择器 jquery 使用      更新时间:2023-09-26

我有一个选择器,我在其中得到第一个元素:

$("#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() 之类的东西访问我的控件的值

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

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