gzpbx
狐狸大王
狐狸大王
  • UID1527
  • 注册日期2004-12-29
  • 最后登录2009-06-30
  • 发帖数410
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
阅读:24012回复:32

ie和firefox中的getElementsByName的不同[转载,遇到同样的问题]

楼主#
更多 发布于:2005-07-20 11:39
ie和firefox中的getElementsByName的不同[转载,遇到同样的问题]
http://blog.donews.com/gzpbx/archive/2005/06/30/448968.aspx

ie和firefox中的getElementsByName的不同
http://layout.mblogger.cn/posts/12331.aspx

        在ie 中getElementsByName(“test“)的时候返回的居然是id=test的object数组,而使用firefox则返回的是name= test的object的数组。按照w3c的规范应该是firefox的实现是正确的,只是不解ie为什么要实现成为id=test的方式呢?“根据 NAME 标签属性的值获取对象的集合。”
        firefox和ie中的getElementByID倒是相同:获取对 ID 标签属性为指定值的第一个对象的引用。

        以上转载,但这个问题我也遇到了,我就在TR中同时加上id 和 name,这样都可以用了~
如果你爱上了一朵生长在一颗星星上的花,那么夜间你看着天空就感到甜蜜愉快。所有的星星上都好象开着花。
abc@home
千年狐狸
千年狐狸
  • UID6047
  • 注册日期2005-05-16
  • 最后登录2011-01-01
  • 发帖数1681
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
1楼#
发布于:2005-07-20 11:39
在兼容 name 及 id attribute 的 tag,你可以用 name=test 或 id=test, IE 都可以用getElementsByName 返回。

id 和 name 目的都是用名字返回 object,本身就是功能重叠。在未有 W3C 标准前, IE 用 all 就已经可以返回。



WINXP SP2 MAXTHON (UNICODE) PROXOMITRON
cnzhouquan
小狐狸
小狐狸
  • UID7516
  • 注册日期2005-07-22
  • 最后登录2005-10-24
  • 发帖数17
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
2楼#
发布于:2005-07-20 11:39
尽量使用getElementsById,IE似乎对getElementsByName的解释有问题,我几乎不用它.
Minisheep
小狐狸
小狐狸
  • UID2333
  • 注册日期2005-01-19
  • 最后登录2006-10-23
  • 发帖数80
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
3楼#
发布于:2005-07-20 11:39
abc@home:在兼容 name 及 id attribute 的 tag,你可以用 name=test 或 id=test, IE 都可以用getElementsByName 返回。

id 和 name 目的都是用名字返回 object,本身就是功能重叠。在未有 W3C 标准前, IE 用 all 就已经可以返回。
回到原帖


id=name?谁说的?
id表示身份证,一个id对应一个人。一般如果页面的都一部分是唯一的话,就要用id标识
name表示姓名,几个人可以重名。一般用在radio或check上。

只有IE这种笨浏览器才会把id和name搞混
jhsea3do
小狐狸
小狐狸
  • UID5719
  • 注册日期2005-05-05
  • 最后登录2006-01-18
  • 发帖数45
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
4楼#
发布于:2005-07-20 11:39
这是W3C为DOM LV2定义的文档对象接口,我没有看到getElementsByName,呵呵,不知道为什么会有人把它扯到标准上面?


interface Document : Node {
  readonly attribute DocumentType     doctype;
  readonly attribute DOMImplementation  implementation;
  readonly attribute Element          documentElement;
  Element            createElement(in DOMString tagName)
                                        raises(DOMException);
  DocumentFragment   createDocumentFragment();
  Text               createTextNode(in DOMString data);
  Comment            createComment(in DOMString data);
  CDATASection       createCDATASection(in DOMString data)
                                        raises(DOMException);
  ProcessingInstruction createProcessingInstruction(in DOMString target, 
                                                    in DOMString data)
                                        raises(DOMException);
  Attr               createAttribute(in DOMString name)
                                        raises(DOMException);
  EntityReference    createEntityReference(in DOMString name)
                                        raises(DOMException);
  NodeList           getElementsByTagName(in DOMString tagname);
  // Introduced in DOM Level 2:
  Node               importNode(in Node importedNode, 
                                in boolean deep)
                                        raises(DOMException);
  // Introduced in DOM Level 2:
  Element            createElementNS(in DOMString namespaceURI, 
                                     in DOMString qualifiedName)
                                        raises(DOMException);
  // Introduced in DOM Level 2:
  Attr               createAttributeNS(in DOMString namespaceURI, 
                                       in DOMString qualifiedName)
                                        raises(DOMException);
  // Introduced in DOM Level 2:
  NodeList           getElementsByTagNameNS(in DOMString namespaceURI, 
                                            in DOMString localName);
  // Introduced in DOM Level 2:
  Element            getElementById(in DOMString elementId);
};



REFFER PAGE:

http://www.w3.org/TR/DOM-Level-2-Core/core.html
关注WebStandard,关心那些不使用IE的弱势群体!
abc@home
千年狐狸
千年狐狸
  • UID6047
  • 注册日期2005-05-16
  • 最后登录2011-01-01
  • 发帖数1681
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
5楼#
发布于:2005-07-20 11:39
Minisheep
政府不能控制人名,所以需要加设独一无二的 id。但网页作者可以控制物件名称,那就根本没需要对一个物件分别设 name 及 id。
[quote]
一般用在radio或check上。
回到原帖

你是指 form elements 吗?会写过网页的人都知道吧。但你有没有想过为甚么 form elements 要强制使用 name?为甚么不干脆使用 id? 那 name 便没有存在的必要了。

不要奉甚么标准为神明。是成年人,就不能像小学生/中学生般奉教科书为必然正确,需要据思考,分析和判断能力。 ;)



WINXP SP2 MAXTHON (UNICODE) PROXOMITRON
猫头猪
狐狸大王
狐狸大王
  • UID163
  • 注册日期2004-11-25
  • 最后登录2005-12-04
  • 发帖数595
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
6楼#
发布于:2005-07-20 11:39
gzpbx总结的挺好。
getElementsByName是DOM Level 2 HTML的内容,
http://www.w3.org/TR/2003/REC-DOM-Level ... D-71555259
不在core部分。DOM标准本来就分core, HTML Events等几个部分。
jhsea3do
小狐狸
小狐狸
  • UID5719
  • 注册日期2005-05-05
  • 最后登录2006-01-18
  • 发帖数45
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
7楼#
发布于:2005-07-20 11:39
斑竹这么说,我也去看了一下,的确是有这个接口,不过gzpbx的做法也欠妥。


   以上转载,但这个问题我也遇到了,我就在TR中同时加上id 和 name,这样都可以用了~


按照id的定义,是不可以重复的,如果重复,肯定不能通过校验,而且会对getElementById造成影响。

而且我也作了一下测试,并不是IE对NAME属性都解释的,可以参见我的测试页面

其中firefox的机制很简单,只要带name的节点都留下了,但是ie/op7就很古怪,如果说他们按照w3c来解释这个接口(即只列出form中的控件)那么就不应该把div给列出来,如果说像fx那样只要带name的节点都留下来,那么应该把em节点也包含进去,可是实际情况却没有,所以这个接口成了鸡肋。

总结一下,如果要写兼容性强而且又能通过验证的页面,那么getElementsByName目前肯定要避免多用,而且不能出现重复的id,但是如果id不能重复的话这个返回复数的意义就不存在了。
关注WebStandard,关心那些不使用IE的弱势群体!
gzpbx
狐狸大王
狐狸大王
  • UID1527
  • 注册日期2004-12-29
  • 最后登录2009-06-30
  • 发帖数410
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
8楼#
发布于:2005-07-20 11:39
那怎么办哪?如果需要根据某个共同的属性返回一组标签可就没有办法了~
如果你爱上了一朵生长在一颗星星上的花,那么夜间你看着天空就感到甜蜜愉快。所有的星星上都好象开着花。
jhsea3do
小狐狸
小狐狸
  • UID5719
  • 注册日期2005-05-05
  • 最后登录2006-01-18
  • 发帖数45
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
9楼#
发布于:2005-07-20 11:39
gzpbx:那怎么办哪?如果需要根据某个共同的属性返回一组标签可就没有办法了~回到原帖


我的意思是避免乱加name。

而且我举的例子很偏,不太可能会有需要在em标签中加name属性,这本身就不符合规则。

其实完全遵照规范来写HTML是不会出现这种很妖的事情的,也就是说name属性只加在form控件中,而且同一个网页中不要出现name和id同名的情况,另外写锚点的时候也要小心。

像你在tr中加name的写法就不规范,其实你可以先把那个table用id找出来,然后用getElementsByTagName把table下面的全部tr翻出来,即符合标准,效率也高。
关注WebStandard,关心那些不使用IE的弱势群体!
abc@home
千年狐狸
千年狐狸
  • UID6047
  • 注册日期2005-05-16
  • 最后登录2011-01-01
  • 发帖数1681
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
10楼#
发布于:2005-07-20 11:39
jhsea3do:这是W3C为DOM LV2定义的文档对象接口,我没有看到getElementsByName,呵呵,不知道为什么会有人把它扯到标准上面?


interface Document : Node {
  readonly attribute DocumentType     doctype;
  readonly attribute DOMImplementation  implementation;
  readonly attribute Element          documentElement;
  Element            createElement(in DOMString tagName)
                                        raises(DOMException);
  DocumentFragment   createDocumentFragment();
  Text               createTextNode(in DOMString data);
  Comment            createComment(in DOMString data);
  CDATASection       createCDATASection(in DOMString data)
                                        raises(DOMException);
  ProcessingInstruction createProcessingInstruction(in DOMString target, 
                                                    in DOMString data)
                                        raises(DOMException);
  Attr               createAttribute(in DOMString name)
                                        raises(DOMException);
  EntityReference    createEntityReference(in DOMString name)
                                        raises(DOMException);
  NodeList           getElementsByTagName(in DOMString tagname);
  // Introduced in DOM Level 2:
  Node               importNode(in Node importedNode, 
                                in boolean deep)
                                        raises(DOMException);
  // Introduced in DOM Level 2:
  Element            createElementNS(in DOMString namespaceURI, 
                                     in DOMString qualifiedName)
                                        raises(DOMException);
  // Introduced in DOM Level 2:
  Attr               createAttributeNS(in DOMString namespaceURI, 
                                       in DOMString qualifiedName)
                                        raises(DOMException);
  // Introduced in DOM Level 2:
  NodeList           getElementsByTagNameNS(in DOMString namespaceURI, 
                                            in DOMString localName);
  // Introduced in DOM Level 2:
  Element            getElementById(in DOMString elementId);
};



REFFER PAGE:

http://www.w3.org/TR/DOM-Level-2-Core/core.html
回到原帖

??? getElementsByName 不是 w3c 标准 ???



WINXP SP2 MAXTHON (UNICODE) PROXOMITRON
abc@home
千年狐狸
千年狐狸
  • UID6047
  • 注册日期2005-05-16
  • 最后登录2011-01-01
  • 发帖数1681
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
11楼#
发布于:2005-07-20 11:39
jhsea3do

我的意思是避免乱加name。

而且我举的例子很偏,不太可能会有需要在em标签中加name属性,这本身就不符合规则。

其实完全遵照规范来写HTML是不会出现这种很妖的事情的,也就是说name属性只加在form控件中,而且同一个网页中不要出现name和id同名的情况,另外写锚点的时候也要小心。

像你在tr中加name的写法就不规范,其实你可以先把那个table用id找出来,然后用getElementsByTagName把table下面的全部tr翻出来,即符合标准,效率也高。
回到原帖

不懂就不要乱说好了,name 是 legitimate attribute,可以在大部份 form elements 以外物件使用。

建议楼主自己到 w3c 及 google 找资料。

--------------------------------------------------------
不关注 web standard,同情自以为懂得 web standard 的人



WINXP SP2 MAXTHON (UNICODE) PROXOMITRON
jhsea3do
小狐狸
小狐狸
  • UID5719
  • 注册日期2005-05-05
  • 最后登录2006-01-18
  • 发帖数45
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
12楼#
发布于:2005-07-20 11:39
什么叫我不懂?


你有没有用过XHTML(s),去看看DTD定义吧,除了meta,a,object,param,map,input,select,textarea,button可以用name作attribute,其他标签都不能用name。

我说话从来都是经过实践后才说的,不像你纸上谈兵!
关注WebStandard,关心那些不使用IE的弱势群体!
abc@home
千年狐狸
千年狐狸
  • UID6047
  • 注册日期2005-05-16
  • 最后登录2011-01-01
  • 发帖数1681
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
13楼#
发布于:2005-07-20 11:39
jhsea3do:什么叫我不懂?


你有没有用过XHTML(s),去看看DTD定义吧,除了meta,a,object,param,map,input,select,textarea,button可以用name作attribute,其他标签都不能用name。

我说话从来都是经过实践后才说的,不像你纸上谈兵!
回到原帖

meta, a, object, param, map 是 form element 嗎?



WINXP SP2 MAXTHON (UNICODE) PROXOMITRON
猫头猪
狐狸大王
狐狸大王
  • UID163
  • 注册日期2004-11-25
  • 最后登录2005-12-04
  • 发帖数595
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
14楼#
发布于:2005-07-20 11:39

不懂就不要乱说好了,name 是 legitimate attribute,可以在大部份 form elements 以外物件使用。

建议楼主自己到 w3c 及 google 找资料。

--------------------------------------------------------
不关注 web standard,同情自以为懂得 web standard 的人

jhsea3do说的基本上是对的,不能算乱说,至少对用法的理解是比较正确的。
name是legitimate attribute,但不是大部分object都可以使用,
可以察看这一页:
http://www.w3.org/TR/html4/index/attributes.html
其中id的相关元素很宽泛,是All elements but BASE, HEAD, HTML, META, SCRIPT, STYLE, TITLE
name则针对性很强,除了form element,只有applet, object, frame, iframe,a,map,param和meta这几个,算不上大部分。
上一页
游客

返回顶部