• 締切済み

getElementsByNameの要素数が取得できません。(ソース付)

よろしくお願いします。 getElementsByNameを使って要素数を取得しようとしています。 しかし、tableタグの数が入っていません。 tableタグになる、nameは無効になるのでしょうか? <html> <head> <title>document.getElementsByName - 指定nameのエレメント全取得</title> </head> <!--指定nameのエレメント全取得のサンプル--> <script type="text/javascript"> function getElements() { var elements = document.getElementsByName("test") alert(elements.length + "個の要素が見つかりました") } </script> </head> <body> <input name="test" type="text"><br> <table name="test"></table><br> <input name="test" type="text"><br> <button onclick="getElements()">getElementsByName('test')</button> </html>

みんなの回答

回答No.4

連続回答すみません。 俺が当時回答した2007年時のMDCの資料には https://developer.mozilla.org/index.php?title=En/DOM/Document.getElementsByName&revision=17#Notes >The name attribute is only valid for a limited set of HTML elements, therefore getElementsByName() is only applicable to those elements. name属性は限られたHTMLの要素のセットでのみ有効であり,getElementsByNameの結果もこれらの要素に対してのみ適用される。 (訳注:ただし、当時Firefox自身がこの挙動に沿っていなかった) と書いてあり,見かけたことある文章なので,#2で述べたものだと思います。確かこれを参考に当時回答を書きました。仕様の記述があいまいなため,2008年になってbug 242808で再燃しているんですね。 http://pastaseca.blog119.fc2.com/blog-entry-87.html 回答はうまく返せないけど,回答当時の背景を記述しました。

回答No.3

少なくともMozillaは違う見解を示しているっぽいので少し読みなおしてみる #ちなみに2を返すのはIEだけ https://developer.mozilla.org/en/DOM/document.getElementsByName

回答No.2

Q3598682が出るまで俺も勘違いしていた。 table要素にはname属性がありません。 http://www.w3.org/TR/html401/struct/tables.html#edef-TABLE ちなみにHTML4.01とXHTML 1.0では定義が異なります。 http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-71555259 #Q3598682で回答したときは,HTMLで定義された以外の要素にはマッチしないものだって書いてあったのを見かけた気がするんだけど,今探しても見つからない

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

そりゃ取れないだろうね nameはdocument内にただ一つでなければならない物で、idとほぼ同等の挙動をするよ。 ただ一つ、と言ってもformの部品の様にグループ化するために同じ物を指定しなければならない場合が有るからgetElement「s」になってるだけだと思う。 body閉じタグが無いのは無視するとしてこの場合は bodyのchildNodesという方法で取得して他の属性を埋め込んでおいて振り分けるしかないね。 どうしても考えるのがめんどいと言うならそういう整形xsltを通してしまうというのもアリだけれどこの分量くらいしか無いようなら返って手間になるだけだからchildNodesで かな。

関連するQ&A

専門家に質問してみよう