【问题标题】:What does document["Some Name"] really do?document["Some Name"] 的真正作用是什么?
【发布时间】:2012-10-17 15:38:15
【问题描述】:

这段代码

<img name="n1" src="" />
<h1 name="n2">a header</h1>
<script>
document["n1"].src = "http://x.y/picture.jpg";
document["n2"].innerHTML = "Boo";
</script>

&lt;img&gt;&lt;h1&gt; 标记有什么不同。图片srcdocument["n1"].src 行的预期更改。但是标题innerHTML 并没有像document["n2"].innerHTML 行所期望的那样改变。 document["some string"] 真正返回了什么?

【问题讨论】:

  • 首先它访问document 对象的属性some string。那么问题是什么是属性,它们对应什么。

标签: javascript html document


【解决方案1】:

在 JavaScript 中,object["string"] 访问 object 上的属性 'string'。这可用于访问许多不同对象的许多不同属性,就像将对象视为值的哈希映射一样。对于document 对象,默认情况下会加载某些属性,例如具有name 属性的元素。至少对于某些浏览器(我不知道是哪个子集)。

也就是说,name attribute 不是 &lt;h1&gt; 标记上的有效属性,因此文档不会将其加载到 document["name"] 值中。

name 属性对以下元素有效:

  • &lt;a&gt; - 属性在 HTML 4 中已弃用,在 HTML5 中已过时
  • &lt;applet&gt; - HTML5 中的元素已过时
  • &lt;button&gt;
  • &lt;form&gt; - HTML 4 中不推荐使用的属性,returned in HTML5
  • &lt;frame&gt; - HTML5 中的元素已过时
  • &lt;iframe&gt;
  • &lt;img&gt; - 属性在 HTML 4 中已弃用,在 HTML5 中已过时
  • &lt;input&gt;
  • &lt;map&gt;
  • &lt;meta&gt; - 不一样的name 属性
  • &lt;object&gt;
  • &lt;param&gt; - 不一样的name 属性
  • &lt;select&gt;
  • &lt;textarea&gt;

对于这些元素中的每一个,如果它们具有name 属性,它们将被添加到文档中,如您所见。不过,获取这些元素的首选方法是使用document.getElementsByName()

【讨论】:

  • 我也会将&lt;a&gt; 的名称标记为已弃用,至少这是在锚元素上放置名称属性时 Firefox 控制台输出的内容。
  • @FabrícioMatté 弃用的注释实际上是关于元素本身被弃用的。然而,name 属性本身对于大多数元素来说已经过时了。我也会标记那些
  • 哦,我明白了。 frame 元素在 HTML5 中已弃用,不知道 applet 元素。名称在 input/select/textarea 元素上很有用,以便能够序列化 get/post 请求的数据。对于锚标记,name 属性允许使用哈希锚链接到它们,但现在首选 ID。
  • 这是一个非常好的答案 (+1),但缺少几件事。为了完整起见,HTML5 中还有其他三个元素的名称属性有效:&lt;fieldset&gt;&lt;keygen&gt;&lt;output&gt;。此外,它缺少指向定义文档对象如何支持命名属性的规范的链接。那是dev.w3.org/html5/spec/dom.html#dom-document-namedItem-which
  • 似乎&lt;embed&gt; 对象上的 HTML5 已过时的name 属性也与文档对象上的命名属性列表相关。
猜你喜欢
  • 1970-01-01
  • 2013-02-23
  • 2014-04-26
  • 2015-10-14
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
  • 2011-08-19
  • 2019-10-31
相关资源
最近更新 更多