Javascriptで、下のようなスクリプトを組みました。

どうしても親ノードの下の子ノードの数さえ取得できません。
list[0].bblength.length;
これが無効になってしまいます。
ほかにも
list.item(0).bblength.length;
も試しましたが、取得できません。
なにが悪いのか、さっぱりで、ネットでもいろいろ検索したのですが解決できませんでした。
なにが問題なのか、どなたかわかりませんか? お教えください。
-------------------------------
<html><head> <title> </title>
<script type="text/javascript">
function web(){
var oyanode =document.getElementsByClassName('oya');
var bbnode = document.getElementsByName("bb");
var oyaLength=oyanode.length;
var bblength=bbnode.length;
var ans;
var ans=list[0].bblength.length;
document.getElementById("crt").innerHTML="oyaノードの数="+oyaLength+"<br>bbノードの数="+bblength+"<br>1つ目のoyaノードの中のbbノードの数="+ans;
}
</script>
</head>
<body>


<div class="oya">
<div name="bb"></div>
<div name="bb"></div>
<div name="bb"></div>
<div name="bb"></div>

</div>

<div class="oya">
<div name="bb"></div>
<div name="bb"></div>
<div name="bb"></div>
<div name="bb"></div>

</div>
<button onclick="web()">クリック</button><br>
<span id="crt"></span>
</body></html>

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/03/08 09:30:25
id:maniad1

スクリプトに間違いがありました。正しくは以下の通りです。

var ans=list[0].bbnode.length;

この部分でエラー停止してしまいます。

<script type="text/javascript"></p> <p>function web(){</p> <p> var oyanode =document.getElementsByClassName('oya');</p> <p> var bbnode = document.getElementsByName("bb");</p> <p> var oyaLength=oyanode.length;</p> <p> var bblength=bbnode.length;</p> <p> var ans;</p> <p> var ans=list[0].bbnode.length;</p> <p> document.getElementById("crt").innerHTML="oyaノードの数="+oyaLength+"<br>bbノードの数="+bblength+"<br>1つ目のoyaノードの中のbbノードの数="+ans;</p> <p>}</p> <p></script>

ベストアンサー

id:ku__ra__ge No.1

回答回数118ベストアンサー獲得回数40

var ans=list[0].bbnode.length;がエラーになる原因は、listが定義されていないからです。
未定義オブジェクトは"0"メンバを持ちません。
 
こういうことがやりたいのでしょうか?

var ans=oyanode[0].children.length;

それともこう?

var ans=Array.filter(oyanode[0].children, function(i) i.getAttribute("name")=="bb").length;

追記:
「親ノードの下の特定のnameの子ノードごとに異なったデータを表示させたい」というのはこういったコードで実現できます。

for (var i=0; i<oyanode[0].children.length; i++) {
  var el = oyanode[0].children[i];
  if (el.getAttribute("name") == "bb") {
    el.innerHTML = i;
  }
}
他4件のコメントを見る
id:ku__ra__ge

なぜならば『a[0].b』は、
変数「a」が示すオブジェクトに属しているのメンバ「0」、…が示すオブジェクトに属しているメンバ「b」
という意味だからです。
それは単なる変数「b」とは全く関係ない別物です。

2014/03/08 03:08:46
id:maniad1

大変参考になりました。
ご丁寧な解説をいただきありがとうございます。
よくわかりました。

2014/03/08 09:29:43

その他の回答0件)

id:ku__ra__ge No.1

回答回数118ベストアンサー獲得回数40ここでベストアンサー

var ans=list[0].bbnode.length;がエラーになる原因は、listが定義されていないからです。
未定義オブジェクトは"0"メンバを持ちません。
 
こういうことがやりたいのでしょうか?

var ans=oyanode[0].children.length;

それともこう?

var ans=Array.filter(oyanode[0].children, function(i) i.getAttribute("name")=="bb").length;

追記:
「親ノードの下の特定のnameの子ノードごとに異なったデータを表示させたい」というのはこういったコードで実現できます。

for (var i=0; i<oyanode[0].children.length; i++) {
  var el = oyanode[0].children[i];
  if (el.getAttribute("name") == "bb") {
    el.innerHTML = i;
  }
}
他4件のコメントを見る
id:ku__ra__ge

なぜならば『a[0].b』は、
変数「a」が示すオブジェクトに属しているのメンバ「0」、…が示すオブジェクトに属しているメンバ「b」
という意味だからです。
それは単なる変数「b」とは全く関係ない別物です。

2014/03/08 03:08:46
id:maniad1

大変参考になりました。
ご丁寧な解説をいただきありがとうございます。
よくわかりました。

2014/03/08 09:29:43

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません