HTML-атрибуты vs properties
Является ли id
атрибутом или свойством HTML?
я должен делать $('#selector').attr('id');
или $('#selector').prop('id');
Я прочитал много статей и все еще в замешательстве.
Может кто-нибудь объяснить мне, в чем разница между атрибутами и свойствами в HTML/JS на очень простом языке?
Ответы
Ответ 1
Атрибуты определяются HTML. Свойства (для элементов DOM) определяются DOM (а также HTML 5, который стирает границу между разметкой и DOM).
Некоторые атрибуты HTML имеют отображение 1:1 на свойства. id
является одним из примеров такого.
Иногда имена разные. Атрибут class
отображается на свойство className
, а атрибут value
отображается на свойство defaultValue
(в то время как свойство value
не имеет соответствующего атрибута).
Когда я изначально писал этот ответ, я думал, что существуют атрибуты без привязки 1:1 к свойству. С этим обновлением я больше не могу думать ни о чем (и внес исправления в приведенные выше примеры).
Ответ 2
Да, attr предназначен для атрибутов html, поскольку они строго определены. prop - для свойств.
Итак, скажем, у вас есть элемент node с классом "something" (raw element not jQuery object). Элемент elem.className является свойством, но здесь находится атрибут. Изменение атрибута класса также автоматически изменяет свойство и наоборот.
В настоящее время attr запутан и запутан, потому что он попытался выполнить работу обеих функций, и из-за этого есть много ошибок. Введение jQuery.fn.prop позволит решить несколько блокаторов, отдельный код, поскольку он должен был быть отделен от начала, и дать разработчикам более быстрые функции делать то, что они ожидают от них.
Позвольте мне составить процент в секунду и сказать, что из моего опыта поддержки IRC и чтения другого кода 95% вариантов использования attr не придется переключаться на prop.
Подробнее