3

我正在用 JavaScript 编写一个通用的帮助函数。它访问className元素的属性。

但由于我使用的是 jQuery,事实证明有时作为参数传递的元素实际上是一个数组(一个 jQuery 集)。

如果参数是元素,则使用参数的最简单方法是什么,或者如果参数是集合,则从集合中获取第一个元素是什么?jQuery 有这方面的工具吗?

4

5 回答 5

6

你总是想要一个原生元素?每个 jQuery 对象都有一个属性jquery(包含 jQuery 版本),因此您可以使用它来检查您获得的元素是否可能是 jQuery 对象:

obj = obj.jquery ? obj[0] : obj;

如果你不喜欢打鸭子:

obj = (obj instanceof jQuery) ? obj[0] : obj;
于 2013-01-07T19:48:05.743 回答
6

您可以使用以下方法测试对象是否为 jQuery 对象instanceof

if (myObject instanceof jQuery) {
    // use $.each to loop over myObject and get class names of all
    // or just use myObject[0].className to return only the first
} else {
    // it's not a jQuery object
}
于 2013-01-07T19:49:44.677 回答
1

如果您想将单个元素、元素数组或 jQuery 对象传递给同一方法,请执行以下操作:

function stuff(element) {
    element = [].concat(element)[0];
}
于 2013-01-07T19:50:58.313 回答
0

如果你必须同时处理jQuery 对象和非 jQuery 元素,这就有点困难了。请记住,jQuery 集合中的每个元素可能有不同className的 s,即第一个和其他元素可能不一样。

它的效率有点低,但这会起作用:

function (obj) {
   var className = $(obj).get(0).className;
}

包装一个 jQuery 对象jQuery()什么都不做,但是包装元素允许你通过.get. 这是低效的,因为您可能有额外的$()电话。

如果这不好,你可以检查一下,obj.hasOwnProperty('className')因为 jQuery 对象通常不应该有它,但我认为这风险更大。

于 2013-01-07T19:51:31.557 回答
0

jQuery 对象是元素还是元素数组?

严格来说,两者都不是。

jQuery 对象是具有某些 Array 功能的 Javascript 对象。在大多数方面,您可以将其用作元素数组。


如果 jQuery 对象可能包含多个元素,而您只想要第一个,则可以使用以下first方法获取:

elements = elements.first();

如果参数可以是元素、元素数组或 jQuery 对象,则可以将其包装在 jQuery 对象中以处理所有情况:

elements = $(elements).first();
于 2013-01-07T19:54:37.350 回答