我正在尝试理解 MDN 术语表中关于 IDL 的简短 条目。
特别是,我正在努力解决“内容与 IDL 属性”标题下第 4 段中描述的行为。
大多数时候,IDL 属性会返回实际使用时的值。例如,
元素的默认type
是“文本”,因此如果设置<input>
,input.type="foobar"
元素将是文本类型(在外观和行为上),但“类型”内容属性的值将为“foobar”。但是,<input>
IDL 属性将返回字符串type
。"text"
我将列出一系列问题,以及我目前在要点中的“有根据的猜测”。我想要么证实我的理解,要么暴露我的缺乏。任何意见、澄清或批评都值得赞赏(这些问题可能完全没有根据)。
在此上下文中,“它们实际使用的值”意味着什么(它们的默认值[例如“text”],或在特定上下文中设置的值[例如“foobar”])?
<input>
元素的类型是IDL还是内容属性?
input.type
访问它,所以它是一个)IDL 属性如果使用
element.foo
设置 IDL 属性,那么 input.type
不符合设置 IDL 属性(在这种情况下,“type”内容属性应该 not 为 "foobar"
)?
在此上下文中,“它们实际使用的值”意味着什么(它们的默认值[例如“text”],或在特定上下文中设置的值[例如“foobar”])?
type
不仅仅是一个存储某些值的字段,对吗?这是 <input />
元素的一个重要特征,浏览器应该理解和使用。浏览器将根据该字段呈现不同的控件和/或其行为(比较 <input type="text" />
、<input type="file" />
、<input type="date" />
)。
拥有各种具有不同功能集的浏览器,当收到未知值时它们不会停止工作。对于输入的
type
属性,当给定值未知时,它们只会回退到 text
。
因此,
text
将是真正使用的,而foobar
仍按最初设置的方式存储,并且可以通过attributes
访问。
元素的类型是 IDL 还是内容属性?
你是对的,它既是:IDL 又是内容属性,具体取决于它的访问方式。它存储原始值,您可以通过
element.attributes['type']
访问它,并且可以通过 IDL 获取实际(工作/支持)值。
如果使用 element.foo 设置 IDL 属性,则 input.type 不符合设置 IDL 属性(在这种情况下,“type”内容属性不应为“foobar”)?
确实如此,但 IDL 属性不仅仅是一个可以放置任何内容的框。它将获取您的值,存储到属性字典中并尝试与各种验证和后备一起使用。如果它无法使用该值,它将使用它找到的最佳后备选项之一。