Статьи

Выпущено jQuery 1.4: 15 новых функций, которые вы должны знать

JQuery 1.4 был недавно выпущен. Это был не просто релиз поддержки, как некоторые предполагали; Есть много новых функций, улучшений и улучшений производительности, включенных в 1.4! В этом посте рассматриваются новые функции и улучшения, которые могут оказаться полезными для вас.

Вы можете скачать jQuery 1.4 прямо сейчас, здесь: http://code.jquery.com/jquery-1.4.js

В версии 1.4 jQuery поддерживал добавление атрибутов в коллекцию элементов с помощью полезного метода attr , которому можно передавать как имя и значение атрибута, так и объект, указывающий несколько атрибутов. В jQuery 1.4 добавлена ​​поддержка передачи объекта атрибутов в качестве второго аргумента самой функции jQuery при создании элемента.

Допустим, вам нужно создать элемент привязки с несколькими атрибутами. С 1.4 это так просто, как:

Возможно, вы заметили атрибут « text » — вам, вероятно, будет интересно, что он там делает, ведь для якорей нет атрибута « text »! Ну, jQuery 1.4 использует свои собственные методы, когда вы передаете определенные атрибуты. Таким образом, указанный выше атрибут «text» заставит jQuery вызвать метод « .text() », передав «Go to Google!» в качестве единственного аргумента.

Лучший пример этого в действии:

Идентификатор «id» добавляется как обычный атрибут, но свойства «css» и «click» инициируют вызов каждого соответствующего метода. Приведенный выше код до выпуска 1.4 был бы написан так:

Узнайте больше о jQuery (…)

Три новых метода были добавлены в арсенал обхода DOM в 1.4: « nextUntil », « prevUntil » и « parentsUntil ». Каждый из этих методов будет проходить через DOM в определенном направлении, пока пройденный селектор не будет удовлетворен. Итак, допустим, у вас есть список фруктов:

1
2
3
4
5
6
7
8
9
<ul>
    <li>Apple</li>
    <li>Banana</li>
    <li>Grape</li>
 
    <li>Strawberry</li>
    <li>Pear</li>
    <li>Peach</li>
</ul>

Вы хотите выбрать все элементы после «Apple», но вы хотите остановить, как только вы достигнете «Клубника». Это не может быть проще:

Узнайте больше о: prevUntil , nextUntil , родителейUntil

Вместо того чтобы связывать воедино несколько методов привязки событий, вы можете объединить их все в один вызов, например:

Это также работает с » .one() «.

Узнайте больше о .bind (…)

Вместо того, чтобы просто определять одну функцию замедления для отдельной анимации, теперь вы можете определить разные функции замедления для каждого свойства, которое вы анимируете. jQuery включает в себя две функции замедления: колебание (по умолчанию) и линейное. Для других вам нужно скачать их отдельно !

Чтобы указать функцию замедления для каждого свойства, просто определите свойство как массив, причем первое значение — это то, к чему вы хотите анимировать это свойство, а второе — функция смягчения, которую нужно использовать:

Смотрите этот код в действии!

Вы также можете определить функции ослабления для каждого свойства в необязательном объекте параметров как пары имя-значение свойства в объекте «specialEasing»:

Эта новая особенность была его идеей!

Узнайте больше об ослаблении недвижимости

В jQuery 1.4 добавлена ​​поддержка делегирования событий « submit », « change », « focus » и « blur ». В jQuery мы используем метод .live() для делегирования событий. Это полезно, когда вам нужно зарегистрировать обработчики событий на многих элементах и ​​когда со временем могут быть добавлены новые элементы (использование « .live() » обходится дешевле, чем повторная привязка постоянно).

Но будь осторожен! Вы должны использовать имена событий « focusin » и « focusout », если хотите делегировать события «focus» и «blur»!

jQuery 1.4 предоставляет новую функцию « proxy » в пространстве имен jQuery. Эта функция принимает два аргумента: либо «область действия» и имя метода, либо функция и предполагаемая область действия. Ключевое слово JavaScript «this» может быть довольно сложно удержать. Иногда вы не захотите, чтобы это был элемент, а объект, который вы ранее создали.

Например, здесь у нас есть объект « app », который имеет два свойства, метод « clickHandler » и объект config:

Метод « clickHandler », когда app.clickHandler() как « app.clickHandler() », будет иметь « app » в качестве контекста, что означает, что ключевое слово « this » разрешит ему доступ к « app ». Это работает довольно хорошо, если мы просто позвоним:

Давайте попробуем связать его как обработчик событий:

Когда мы нажимаем на якорь, он не работает (ничего не предупреждено). Это потому, что jQuery (и большинство нормальных моделей событий) по умолчанию устанавливает контекст обработчика в качестве целевого элемента, то есть элемент, по которому только что щелкнули, будет доступен через « this ». Но мы не хотим этого, мы хотим, чтобы для « this » было установлено « app ». Достижение этого в jQuery 1.4 не может быть проще:

Теперь всякий раз, когда якорь нажимается, «Привет!» будет предупрежден!

Прокси-функция возвращает «обернутую» версию вашей функции, с « this », установленным в любое this вами значение. Это полезно и в других контекстах, таких как передача обратных вызовов другим методам jQuery или плагинам.

Узнайте больше о jQuery.proxy

Теперь вы можете добавить задержку в ваши очереди анимации. Фактически, это работает в любой очереди, но наиболее распространенный вариант использования, вероятно, будет с очередью «fx». Это позволяет вам делать паузу между анимациями, не связываясь с обратными вызовами и вызовами « setTimeout ». Первый аргумент » .delay() » — это количество миллисекунд, на которые вы хотите отложить.

Если вы хотите отложить очередь, отличную от очереди по умолчанию «fx», то вам нужно передать имя очереди в качестве второго аргумента в « .delay() ».

Подробнее о .delay(…)

jQuery 1.4 позволяет легко проверить, является ли элемент (или коллекция) » .has() » чем-то. Это программный эквивалент фильтра выбора jQuery » :has() «. Этот метод выберет все элементы в текущей коллекции, которые содержат хотя бы один элемент, соответствующий переданному селектору.

Это выберет все элементы DIV, которые содержат элементы UL. В этой ситуации вы, вероятно, просто использовали бы фильтр выбора (» :has() «), но этот метод все еще полезен, когда вам нужно фильтровать коллекцию программным способом.

jQuery 1.4 также раскрывает функцию « contains » в пространстве имен jQuery. Это функция низкого уровня, которая принимает два узла DOM. Он вернет логическое значение, указывающее, содержится ли второй элемент в первом элементе. Например

Узнайте больше о: .has(…) , jQuery.contains(…)

У нас уже был метод » .wrap() «. В jQuery 1.4 добавлен метод .unwrap() который делает все наоборот. Если мы примем следующую структуру DOM:

1
2
3
<div>
    <p>Foo</p>
</div>

Мы можем развернуть элемент абзаца так:

В результате структура DOM будет:

1
<p>Foo</p>

По сути, этот метод просто удаляет родителя любого элемента.

Подробнее о .unwrap(…)

Новый .detach() позволяет удалять элементы из DOM, так же, как и метод .remove() . Основное отличие этого нового метода заключается в том, что он не уничтожает данные, хранящиеся в jQuery для этого элемента. Это включает в себя данные, добавленные через » .data() » и любые обработчики событий, добавленные через систему событий jQuery.

Это может быть полезно, когда вам нужно удалить элемент из DOM, но вы знаете, что вам нужно будет добавить его обратно на более позднем этапе. Его обработчики событий и любые другие данные сохранятся.

Узнайте больше о .detach(…)

В jQuery 1.4 есть два новых способа использования метода .index() . Ранее вы могли передавать только элемент в качестве аргумента и ожидали, что будет возвращено число, указывающее индекс этого элемента в текущей коллекции.

Передача без аргументов теперь возвращает индекс элемента среди его братьев и сестер. Итак, предполагая следующую структуру DOM:

1
2
3
4
5
6
7
8
9
<ul>
    <li>Apple</li>
    <li>Banana</li>
    <li>Grape</li>
 
    <li>Strawberry</li>
    <li>Pear</li>
    <li>Peach</li>
</ul>

При щелчке по элементу списка вы хотите узнать индекс элемента, по которому щелкнули, среди всех остальных элементов списка. Это так просто, как:

jQuery 1.4 также позволяет вам указывать селектор в качестве первого аргумента для « .index() », что даст вам индекс текущего элемента среди коллекции, созданной из этого селектора.

Вы должны заметить, что этот метод возвращает целое число и возвращает -1, если переданный селектор / элемент не может быть найден в документе.

Подробнее о .index(…)

Большинство методов манипулирования DOM теперь поддерживают передачу функции в качестве единственного аргумента (или второго, в случае » .css() » & » .attr() «). Эта функция будет запускаться на каждом элементе в коллекции, чтобы определить, что следует использовать в качестве реального значения для этого метода.

Следующие методы имеют эту возможность:

В функции обратного вызова вы будете иметь доступ к текущему элементу в коллекции через « this », а его индекс — через первый аргумент.

Кроме того, с некоторыми из вышеперечисленных методов вы также получите второй аргумент. Если вы вызываете метод установки (например, « .html() » или « .attr('href) »), у вас будет доступ к текущему значению. Например

Как видите, с помощью методов » .css() » и » .attr() » вы передадите функцию в качестве второго аргумента, поскольку первый будет использоваться для именования свойства, которое вы хотите изменить:

jQuery 1.4 добавляет две новые вспомогательные функции (хранящиеся непосредственно в пространстве имен jQuery), которые помогают вам определить, с каким типом объекта вы имеете дело.

Во-первых, есть « isEmptyObject », эта функция возвращает логическое значение, указывающее, является ли переданный объект пустым (без свойств — прямого и унаследованного). Во-вторых, есть « isPlainObject », который возвращает логическое значение, указывающее, является ли переданный объект простым объектом JavaScript, то есть созданным с помощью « {} » или « new Object() ».

Узнайте больше о: isPlainObject(…) , isEmptyObject(…)

.closest() » .closest() » в jQuery теперь принимает массив селекторов. Это полезно, когда вы хотите пройти по предкам элемента, ища (более одного) ближайших элементов с определенными характеристиками.

Кроме того, теперь он принимает контекст в качестве второго аргумента, что означает, что вы можете контролировать, насколько далеко или насколько близко вы хотите, чтобы DOM проходил. Оба из этих улучшений учитывают редкие случаи использования, но они используются внутри с большим эффектом!

Узнайте больше о .closest(…)

Как уже упоминалось, для делегирования событий «focus» и «blur» необходимо использовать эти новые события, называемые «focusin» и «focusout». Эти события позволяют вам действовать, когда элемент или его потомок получает фокус.

Следует также отметить, что оба эти события не распространяются («пузырь»); они захвачены. Это означает, что самый внешний (предковый) элемент будет запущен перед причинным «целевым» элементом.

Узнайте больше о focusIn и focusOut .

Ну вот и все! Я пытался осветить изменения, которые, как мне кажется, повлияют на вас!

Если вы еще этого не сделали, вам стоит посетить « 14 дней jQuery », потрясающее онлайн-событие, посвященное выпуску jQuery 1.4, и четвертый день рождения jQuery!

И не забудьте проверить новую документацию API !

Знаете ли вы, что вы можете заработать до 600 долларов за написание учебника PLUS и / или скринкаст для нас? Мы ищем подробные и хорошо написанные учебники по HTML, CSS, PHP и JavaScript. Если у вас есть такая возможность, пожалуйста, свяжитесь с Джеффри по адресу [email protected].

Обратите внимание, что фактическая компенсация будет зависеть от качества окончательного урока и скринкаста.

Написать ПЛЮС учебник
  • Подпишитесь на нас в Твиттере или подпишитесь на ленту Nettuts + RSS для получения лучших учебных материалов по веб-разработке.