【问题标题】:Get element under a selector with jquery使用jquery获取选择器下的元素
【发布时间】:2012-08-11 05:43:17
【问题描述】:

我有一个选择器,我可以在其中获取第一个元素:

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

【问题讨论】:

  • api.jquery.com/get - 虽然这两个选项都做同样的事情,但没有一个真的比另一个更好
  • 这里有什么问题? setActivityControlsState.call($("#MyControl")[0]); 工作正常。
  • 或者你也可以使用$("#MyControl :eq(0)")
  • @redDevil 这给出了一个 jQuery 对象,他想要 dom 元素(而且那里不会有空格)。 .get( index )是方法
  • 使用 $("#MyControl").first()$("#MyControl").get(0) 或使用纯 JavaScript document.getElementById("MyControl")

标签: javascript jquery jquery-selectors


【解决方案1】:

我是否可以建议进行小型重组以减轻这种需求:

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

【讨论】:

  • $("#MyControl").get() 返回转换为普通数组的 jQuery 对象。
  • @Fresheyeball:非常感谢。这正是我所说的:一个很好的答案。我将使用 get 而不是括号来访问第一个元素。
猜你喜欢
  • 1970-01-01
  • 2011-12-07
  • 2010-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
相关资源
最近更新 更多