В jQuery, как делает this.each () работа?

Для создания моего вопроса более конкретным я прочитал документацию относительно .each () для jQuery, но я немного более смущен. У меня есть этот код:

$.fn.imgAreaSelect = function (options) {
options = options || {};

this.each(function () {
    if ($(this).data('imgAreaSelect')) {
        if (options.remove) {
            $(this).data('imgAreaSelect').remove();
            $(this).removeData('imgAreaSelect');
        }
        else
            $(this).data('imgAreaSelect').setOptions(options);
    }
    else if (!options.remove) {
        if (options.enable === undefined && options.disable === undefined)
            options.enable = true;

        $(this).data('imgAreaSelect', new $.imgAreaSelect(this, options));
    }
});

if (options.instance)
    return $(this).data('imgAreaSelect');

return this;

};

Теперь то, что я не получаю об этом, - то, что, почему каждый функционирует не, имеют индекс или элемент? Этот отрывок кода от плагина jQuery, который я пытался перечитать. Я также не вполне понимаю $ .fn. наверху, я знаю, что он обозначает прототип, но что точно продолжается здесь?

6
задан anthonypliu 24 June 2010 в 00:04
поделиться

3 ответа

Функция each может принимать в качестве параметра функцию, принимающую индекс, но это необязательно.

Для простоты .each был реализован для того, чтобы this ссылался на текущий элемент.

Однако .each может принимать индекс в качестве параметра обратного вызова.

Пример такого использования есть в jQuery API

$('li').each(function(index) {
    alert(index + ': ' + $(this).text());
});

Reference

$('li').each(function(index) {
    alert(index + ': ' + $(this).text());
});

- http://api.jquery.com/each/

8
ответ дан 8 December 2019 в 18:32
поделиться

Ему не нужен индекс, поскольку this обеспечивает контекст. Как отмечается в docs, "к значению можно также получить доступ через ключевое слово this". Для этого используется call. Что-то вроде:

userFunction.call(valueOfElement, indexInArray, valueOfElement);

$.fn.imgAreaSelect = function (options) означает, что функция добавляется к прототипу. Это позволяет использовать ее с любым экземпляром объекта jQuery.

3
ответ дан 8 December 2019 в 18:32
поделиться

$. Each (fn) вызывает fn для каждого элемента, содержащегося в текущем контексте. Каждый раз, когда он вызывает fn , он передает «текущий» элемент как this .

Итак, в следующем примере:

$("div").each(function() {
    alert(this.className);
});

Выдает по одному предупреждению для каждого

в DOM и отображает имя класса для каждого.

2
ответ дан 8 December 2019 в 18:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: