Ответ 1
Если вы используете синтаксис цепочки:
$(".class").each(function() {
// ...
});
... Я не думаю, что существует какой-либо (разумный) способ для кода внутри функции each
, чтобы узнать, сколько там элементов. (Неразумные способы включают повторение селектора и использование index
.)
Но достаточно легко сделать коллекцию доступной для функции, которую вы вызываете в each
. Вот один из способов сделать это:
var collection = $(".class");
collection.each(function() {
// You can access `collection.length` here.
});
Как несколько запутанный вариант, вы можете преобразовать объект jQuery в массив, а затем использовать массив forEach
. Аргументы, которые передаются в обратный вызов forEach
, - это посещаемая запись (то, что jQuery дает вам как this
и как второй аргумент), индекс этой записи и массив, на который вы ее вызывали:
$(".class").get().forEach(function(entry, index, array) {
// Here, array.length is the total number of items
});
Это предполагает, по крайней мере, смутно современный движок JavaScript и/или прокладку для Array#forEach
.
Или, если на то пошло, дайте себе новый инструмент:
// Loop through the jQuery set calling the callback:
// loop(callback, thisArg);
// Callback gets called with `this` set to `thisArg` unless `thisArg`
// is falsey, in which case `this` will be the element being visited.
// Arguments to callback are `element`, `index`, and `set`, where
// `element` is the element being visited, `index` is its index in the
// set, and `set` is the jQuery set `loop` was called on.
// Callback return value is ignored unless it `=== false`, in which case
// it stops the loop.
$.fn.loop = function(callback, thisArg) {
var me = this;
return this.each(function(index, element) {
return callback.call(thisArg || element, element, index, me);
});
};
Использование:
$(".class").loop(function(element, index, set) {
// Here, set.length is the length of the set
});