Ниже приведен фрагмент рабочего кода. "= Истинная" часть меня сбивает с толку. Это то, что я думаю, происходит.
1- создать пустой массив.
2- принимают выбранные элементы (цели) списка и цикл.
3-, если атрибуты класса для целевого элемента списка не находятся в массиве, тогда введите if block.
4- добавить атрибуты класса для элемента списка целей и добавить их в массив.
Я понимаю, что javascript использует "push", а jquery использует "add" для вставки элементов в массив. В приведенном ниже коде не используется push или add.
var foo = [];
$($targets).each(function(i) {
if (!foo[$(this).attr('class')]) {
foo[$(this).attr('class')] = true;
}
});
Код испорчен, вы должны использовать объект вместо массива, если вы хотите использовать строки как ключи:
var foo = {};
Затем он проверяет, является ли ключ ложным в объекте, хотя вы можете захотеть проверить строгое существование с оператором in
:
$targets.each(function() {
var klass = this.className; // cache, no need for jQuery
// if 'foo' doesn't have the key 'klass' then add it
if (! (klass in foo)) foo[klass] = true;
});
Если имена классов не такие, как "1" или "2", вы не можете обращаться к элементам внутри массива таким образом. Тем не менее, массивы построены из объектов. Например, вы можете делать такие вещи:
var foo = ['a', 'b', 'c'];
foo.bar = 'hello';
foo;
//=> ['a', 'b', 'c']
foo[0];
//=> 'a';
foo['bar'];
//=> 'hello';
Итак, что происходит, так это то, что ваш скрипт не добавляет эти элементы в фактический массив. Вместо этого он присваивает их массиву, как если бы он был обычным объектом JavaScript.