Работа со свойствами
.prop() — возвращает или изменяет значение свойств выбранных элементов страницы.
Функция имеет четыре варианта использования:
.prop( propertyName )
Возвращает значение атрибута propertyName у выбранного элемента. Если выбрано несколько элементов, то значение будет взято у первого.
- propertyName — имя атрибута.
.prop( propertyName, value )
Устанавливает свойству propertyName значение value, у всех выбранных элементов.
- propertyName — имя свойства;
- value — значение, присваиваемое свойству.
.prop( propertyName, function )
Присваивает свойству propertyName значение, возвращенное функцией function() для всех элементов набора jQuery
- propertyName — имя свойства;
- function (index, oldPropertyValue) — функция, которая вызывается индивидуально для каждого отдельного элемента в наборе, а возвращаемое ею значение становится значением атрибута
- index — позиция элемента в наборе;
- oldPropertyValue — текущее значение свойства
propertyNameу элемента.
Замечание! Используя метод .prop(propertyName), вы получите свойства только первого элемента из всех выбранных. Если вам нужны значения всех элементов, то следует использовать конструкции типа .map() или .each().
.attr() или .prop()
В определенных ситуациях разница между .attr() и .prop() существенна. До jQuery 1.6 .attr() содержал множество багов и был непрост в поддержке. Начиная с jQuery 1.6 метод .prop() предназначен для работы со свойствами DOM-объектов, в то время как .attr() — для работы с атрибутами.
Например, selectedIndex, tagName, nodeName, nodeType, ownerDocument, defaultChecked, и defaultSelected должны быть получены или изменятся функцией .prop()
Начиная с jQuery 1.6, метод .attr() возвращает undefined для тех атрибутов, значение которых не было задано. Для получения и выставления таких опций как checked, selected, или disabled используйте метод .prop()
Допустим у нас есть элемент <input type="checkbox" checked />, а в переменной elem хранится его DOM-объект. В этом случае разница при работе с атрибутами и свойствами существенна, т.к. идет речь об атрибутах не требующих указания значений (checked и disabled в input-элементах). Сравним результаты:
elem.checked— возвращает true$( elem ).prop( "checked" )— возвращает trueelem.getAttribute( "checked" )— возвращает пустую строку$( elem ).attr( "checked" )— начиная с jQuery 1.6 возвращает пустую строку и true для более ранних версий
Кросс-браузерный способ определить, установлен ли флажок:
if ( elem.checked ) или if ( $( elem ).prop( "checked" ) ) или if ( $( elem ).is( ":checked" ) )
Установка или изменение значения элементам
Метод .prop() это один из способов выставления значение элементам. Его следует использовать при работе с такими настройками как: selectedIndex, tagName, nodeName, nodeType, ownerDocument, defaultChecked, или defaultSelected. Начиная с jQuery 1.6, значение данных настроек не может быть задано с помощью метода .attr().
$( "input" ).prop( "disabled", false ); $( "input" ).prop( "checked", true ); $( "input" ).val( "someValue" );
Динамически формируемые значения
Используя функцию, мы можем динамически задать значение той или иной настройке. К примеру, поменяем все значения чекбоксов на странице:
$( "input[type='checkbox']" ).prop( "checked", function( i, val ) {
return !val;
});