jQuery итерационный вопрос (запутанный примером в книге) - PullRequest
0 голосов
/ 30 октября 2010

Я пробираюсь через O'Reilly jQuery Cookbook . На стр. 100 есть пример, где я не получаю ни одной детали. Я в первую неделю смотрю на jQuery, так что это не удивительно, но я надеюсь, что кто-то сможет прояснить ситуацию.

Функция является переключателем с несколькими наворотами:

onValue и offValue оба являются логическими значениями и должны иметь противоположные значения, и, возможно, было бы яснее иметь только одно из них, но идея состоит в том, чтобы приспособиться к чему-то, где (например) name " отключить». необязательный on, также логический, позволяет вызывающей стороне использовать это как «набор» вместо «переключения»

jQuery.fn.toggleAttr = function (name, onValue, offValue, on) {
    function set($element, on) {
        var value = on ? onValue : offValue;
        return value == null ? $element.removeAttr(name) : $element.attr(name, value);
    }
    return on !== undefined ?
        // next line is where I'm confused
        set(this, on) : 
        this.each(function (i, element) {
             var $element = $(element);
             set($element, $element.attr(name) !== onValue);
        });
};

Как set( this, on ) работает здесь? Кажется, он работает с списком элементов, но что-то должно произойти с каждым элементом, и я не вижу, что могло бы вызвать какую-либо итерацию. Я бы ожидал что-то более похожее на on === undefined, что-то вроде:

        this.each (function( i, element ) {
            set( $(element), on);
        )}

Итак, я что-то упустил?

1 Ответ

0 голосов
/ 30 октября 2010

Если on не задано, функция toggleAttr проходит по каждому элементу, проверяя, на что установлено текущее значение атрибута name, и сравнивая его с переменной onValue.

Когда on установлено, это означает, что вы говорите toggleAttr: «Я хочу, чтобы вы переключили все элементы в true / false и игнорировали текущее значение». Так что не нужно перебирать все элементы и проверять, какое текущее значение установлено, потому что вы сказали, что это грубое значение.

Пример: http://jsfiddle.net/petersendidit/sHJC3/2/

...