W3C home > Mailing lists > Public > public-html-ig-zh@w3.org > June 2012

Re: WebIDL 簡介(轉: Why not NodeList#forEach :\?)

From: Kang-Hao (Kenny) Lu <kennyluck@w3.org>
Date: Tue, 26 Jun 2012 08:41:03 +0800
Message-ID: <4FE9051F.2080801@w3.org>
To: John Hax <johnhax@gmail.com>
CC: W3C HTML5 中文興趣小組 <public-html-ig-zh@w3.org>, DX Jin <dox.jin@gmail.com>, 牛晓光 <niuxg0@hotmail.com>, 劭非程 <csf178@gmail.com>
(12/06/21 19:53), John Hax wrote:
> 有这个是太好了。

但是目前 Chrome 團隊的實驗似乎顯示有一些兼容問題[1],未來還不怎麼明確。

> 不过问题是DOM4里为啥只有NodeList是ArrayClass?为啥 HTMLCollection就不
> 是(大量API返回这个,比如 getElementsByTagName/ClassName、
> Element.children等)?

喔,聽你這樣說我才想起來我忘了多附一些連結了。這裡有兩個提案:

1. 讓 HTMLCollection 繼承 NodeList
2. 讓 HTMLCollection 繼承 Array

提案討論[2]、W3C Bug(把自己加進 Cc 裡吧)[3]。主要的問題都是

interface HTMLCollection {
  getter object? namedItem(DOMString name); // 仅返回Element。
};

這裡 getter 的意思基本上就是 htmlcollection[x] 等價於
htmlcollection.namedItem(x)(getter 的 WebIDL 誠徵翻譯),而根據規範[4]
敘述的 'namedItem':

  # namedItem(key)方法必须返回集合中的第一个符合下列类别的元素:
  #
  #
  # 1. 其为HTML命名空间下的a、applet、area、embed、form、frame、
  #     frameset、iframe、img和object元素,且其name属性等于key。或者
  #     其为一个元素,且其ID等于key。
  # 2. 如果没有找到这样的元素,则该方法必须返回空。
  (再次感謝牛尾巴的翻譯!)

也就是在一個有 <a name="forEach">HTMLCollection</a> 的 HTMLCollection
裡,'htmlcollection.forEach' 究竟是那個 HTML 元素還是 Array 的方法還有這
個衝突或是兼容問題,還需要一個完整的提案(Window 就有用 [OverrideBuiltins])

> 还有DOMStringList、

  # DOMStringList will be removed from this specification in the near
  # future. If you are using it now, please use DOMString[] or
  # sequence<DOMString> instead. Thanks!

> DOMTokenList等等……

這個看起來沒有 getter 的問題,有沒有興趣去回報錯誤一下?(規範上面的
file a bug 連結。)

[1] https://mail.mozilla.org/pipermail/es-discuss/2012-June/023581.html
[2] http://lists.w3.org/Archives/Public/public-webapps/2012JanMar/1155
[3] https://www.w3.org/Bugs/Public/show_bug.cgi?id=14834
[4] http://www.w3.org/html/ig/zh/wiki/DOM4#dom-htmlcollection-nameditem


以上

Kenny
Received on Tuesday, 26 June 2012 00:41:32 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 6 January 2015 20:43:50 UTC