После изменений, внесенных в jQuery 1.6.1, я пытался определить разницу между свойствами и атрибутами в HTML.
Глядя на список заметок о выпуске jQuery 1.6.1 (внизу), кажется, что можно классифицировать свойства и атрибуты HTML следующим образом:
Свойства: Все, которое имеет логическое значение или рассчитывается UA, например selectedIndex.
Атрибуты: «Атрибуты», которые можно добавить к элементу HTML, который не является ни логическим, ни содержащим значение, созданное UA.
Мысли?
javascript
html
dom
properties
schalkneethling
источник
источник
Ответы:
При написании исходного кода HTML вы можете определить атрибуты ваших элементов HTML. Затем, как только браузер проанализирует ваш код, будет создан соответствующий узел DOM. Этот узел является объектом, и поэтому у него есть свойства .
Например, этот элемент HTML:
имеет 2 атрибута (
type
иvalue
).После того, как браузер проанализирует этот код, будет создан объект HTMLInputElement , и этот объект будет содержать десятки свойств, таких как: accept, accessKey, align, alt, атрибуты, автофокус, baseURI, флажок, childElementCount, childNodes, children, classList, className, высота клиента и т. д.
Для данного объекта узла DOM свойства - это свойства этого объекта, а атрибуты - это элементы
attributes
свойства этого объекта.Когда узел DOM создается для данного элемента HTML, многие его свойства относятся к атрибутам с одинаковыми или похожими именами, но это не отношение один к одному. Например, для этого элемента HTML:
соответствующий DOM - узел будет иметь
id
,type
иvalue
свойство (среди прочих):id
Свойство отражено свойство дляid
атрибута: Получение свойства считывает значение атрибута, и установив свойство записывает значение атрибута.id
является чисто отраженным свойством, оно не изменяет и не ограничивает значение.type
Свойство отражено свойство дляtype
атрибута: Получение свойства считывает значение атрибута, и установив свойство записывает значение атрибута.type
не является чисто отраженным свойством, потому что оно ограничено известными значениями (например, допустимыми типами ввода). Если у вас есть<input type="foo">
, тоtheInput.getAttribute("type")
дает вам,"foo"
ноtheInput.type
дает вам"text"
.В отличие от этого
value
свойство не отражаетvalue
атрибут. Вместо этого это текущее значение ввода. Когда пользователь вручную изменяет значение поля ввода,value
свойство будет отражать это изменение. Так что, если пользователь вводит данные"John"
в поле ввода, то:в то время как:
value
Свойство отражает текущее текстовое содержимое внутри-поле ввода, в то время какvalue
атрибут содержит начальный текст-содержимоеvalue
атрибута из исходного HTML - кода.Поэтому, если вы хотите узнать, что в данный момент находится внутри текстового поля, прочитайте свойство. Если вы, однако, хотите знать, каково было начальное значение текстового поля, прочитайте атрибут. Или вы можете использовать
defaultValue
свойство, которое является чистым отражениемvalue
атрибута:Есть несколько свойств , которые непосредственно отражают их атрибут (
rel
,id
), некоторые из них прямые отражений с слегка разными именами (htmlFor
отражаетfor
атрибут,className
отражаетclass
атрибут), многие из которых отражают их атрибут , но с ограничениями / модификациями (src
,href
,disabled
,multiple
), и т.д. на. Спецификация охватывает различные виды отражения.источник
for
->htmlFor
) и аналогично список свойств, которые берут свое начальное значение из атрибута, но не отражают его (input.value
). Я ожидаю, что это будет где-то в источнике библиотеки, такой как github.com/Matt-Esch/virtual-dom, но это не совсем задокументировано.Прочитав ответ Симе Видаса , я искал больше и нашел очень простое и легкое для понимания объяснение в угловых документах .
источник
colspan
атрибут имеетcolSpan
свойство. ... Итак, какой атрибут не имеет связанного свойства сейчас?Ответы уже объясняют, как атрибуты и свойства обрабатываются по-разному, но я действительно хотел бы указать, насколько это безумно . Даже если это в какой-то степени спецификация.
Сумасшествие - иметь некоторые атрибуты (например, id, class, foo, bar ), чтобы сохранять только один вид значений в DOM, а некоторые атрибуты (например, проверено, выбрано ) сохранять два значения; то есть значение «когда оно было загружено» и значение «динамическое состояние». (Разве DOM не должен представлять состояние документа в полной мере?)
Абсолютно важно, чтобы два поля ввода , например, текст и флажок, вели себя одинаково . Если поле ввода текста не сохраняет отдельное значение «когда оно было загружено» и «текущее, динамическое» значение, почему флажок установлен? Если у флажка действительно есть два значения для проверенного атрибута, почему у него нет двух значений для его атрибутов class и id ? Если вы ожидаете изменить значение текстового * входного * поля и ожидаете, что DOM (то есть «сериализованное представление») изменится и отразят это изменение, почему же вы не ожидаете того же от поля ввода флажок типа по проверенному атрибуту?
Дифференциация «это логический атрибут» просто не имеет для меня никакого смысла или, по крайней мере, не является достаточной причиной для этого.
источник
checked
Атрибут представленdefaultChecked
свойство (аналогично для ввода текста , заданныйvalue
атрибут , представленноеdefaultValue
свойством). Второе свойство,checked
требуется для представления того, установлен ли флажок, потому что это неотъемлемая часть функциональности флажка: он является интерактивным и может быть изменен (и сброшен к значению по умолчанию, если присутствует кнопка сброса формы) пользователем таким образом, что другой атрибут, такой какid
нет. Это никак не связано с тем, что это логический атрибут.хорошо, они определены w3c, что является атрибутом и что является свойством http://www.w3.org/TR/SVGTiny12/attributeTable.html
но в настоящее время attr и prop не так уж различны, и есть почти одинаковые
но они предпочитают опору для некоторых вещей
ну, на самом деле вам не нужно что-то менять, если вы используете attr или prop или оба, оба работают, но я видел в моем собственном приложении, что prop работал там, где atrr не работал, поэтому я взял в своем приложении 1.6 prop =)
источник
Различия в свойствах и атрибутах HTML:
Давайте сначала посмотрим на определения этих слов, прежде чем оценивать разницу в HTML:
Английское определение:
В контексте HTML:
Когда браузер анализирует HTML, он создает древовидную структуру данных, которая в основном представляет собой представление HTML в памяти. Это древовидная структура данных содержит узлы, которые являются HTML-элементами и текстом. Атрибуты и свойства относятся к этому следующим образом:
Также важно понимать, что сопоставление этих свойств не 1 к 1. Другими словами, не каждый атрибут, который мы даем в элементе HTML, будет иметь похожее свойство DOM с именем.
Кроме того, у разных элементов DOM разные свойства. Например,
<input>
элемент имеет свойство value, которого нет в<div>
свойстве.Пример:
Давайте возьмем следующий HTML-документ:
Затем мы проверяем
<div>
, в консоли JS:Мы видим следующие свойства DOM (chrome devtools, показаны не все свойства):
class
зарезервированное ключевое слово в JS). Но на самом деле 2 свойства,classList
аclassName
.источник