lengthが読めない理由が分からない
var divs = document.getElementsByTagName("div");
alert(divs);
for(var i=0; i < divs.childNodes.length; ++i){
if(divs.childNodes[i].tagName == "h2"){
a.push = divs[i];
b.push = divs[i].h2.nodeValue;
divs[i].style.display = "none";
}
}
JavaScriptです。
こんなコードを実行すると、forのとこのchildNodes.lengthが読めないとエラーになります。
divsの中身はあるはずだから、読めるんじゃないかと思うのですが。
ちゃんと[object NodeList]と表示されます。
htmlの方には、divは5つぐらいかいてあります。
JavaScriptの挙動がよく分からない……。
chromeでやってますが、firefoxでも動きませんでした。
理由を教えていただけるとうれしいです。
なんか他につっこみたいこともあれば……。
h2をあんな読み方できない、とか。
No.3ベストアンサー
- 回答日時:
>divs.childNodes
divs[0]~divs[n]がchildeNodesをもっているだけで、
divsはオブジェクトを集合したがただの配列なのでchildNodesを
もっていませんね
フロー的にはh2を含むdivを隠す?
であればh2を拾った方がはやくないですか?
<script>
function hide(){
var h2s = document.getElementsByTagName("h2");
for(var i=0; i < h2s.length; i++){
var n=h2s[i];
var a=new Array();
var b=new Array();
while(n=n.parentNode){
if(n.nodeName=="DIV"){
a.push(n);
b.push(h2s[i].firstChild.nodeValue);
n.style.display = "none";
break;
}
}
}
alert(a[0]);
alert(b[0]);
}
</script>
<div><h2>test1</h2></div>
<div>hogehoge</div>
<div><h2>test2</h2></div>
<div><hr><h2>test3</h2></hr></div>
<input type="button" value="hide" onclick="hide()">
No.6
- 回答日時:
lengthの件は他の方の回答どおりで。
これがHTML文章で、tagNameを「比較」するなら大文字じゃないとダメかも。
~.tagName == 'h2'
↓
~.tagName == 'H2'
XMLなら大文字小文字を区別してそのまま格納されるけどHTMLだと常に大文字で格納されてます。
http://www.doraneko.org/misc/dom10/19981001/leve …
No.4
- 回答日時:
divsは配列(コレクションノード)だから、
divs[n].childNodes.length
のように個別指定するか、each構文(普通のjavascriptにはない)
にしなければ、....
それと何故i++じゃなく++iなのか、[0]の要素は絶対無視できるんですか?
divsは配列なのにそのままchildNodes使えるはずがなかったんですね。
わかりやすい指摘です。
forの中で使う分には、i++も++iも同じ動きだと認識しているのですが、間違ってますか?
別に++iでも[0]要素は無視されてないと思います。
普段はC#とかを使ってますが、問題になったことはないです。
JavaScriptは分かりませんが……。
ありがとうございました。
No.2
- 回答日時:
var a = [ ], b = [ ];
var divs = document.getElementsByTagName("div");
for( var i=0; i < divs.length; ++i) {
for( var j=0; j< divs[i].childNodes.length; ++j) {
if( divs[i].childNodes[j].nodeName == "H2"){
a.push( divs[i].childNodes[j] );
b.push( divs[i].childNodes[j].firstChild.nodeValue );
divs[i].childNodes[j].style.display = "none";
}
}
}
ためしてないけど
//@cc_on
var a = [ ], b = [ ];
var divs = document.getElementsByTagName("div");
for( var c1 = 0, tgt1, h2; tgt1 = divs[ c++ ]; ) {
h2 = tgt1.getElemensByTagName( 'h2' );
for( var c2 = 0, tgt2; tgt2 = h2[ c2++ ]; ) {
a.push( tgt2 );
b.push( tgt2./*@if(1) innerText @else@*/ textContent /*@end@*/ );//ちょっとちがう
tgt2.style.display = 'none';
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript 読み込んだQRコードをフォームに受け渡したい 1 2023/05/18 11:18
- 統計学 生物統計学の質問 7 2022/05/17 13:59
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- FX・外国為替取引 pine scriptのコードが動作しない 1 2023/02/01 19:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
google apps scriptの終了のさせ方
-
第3日曜日のみの日付を取得、...
-
javaScript textareaの一行あた...
-
択一形式のテストをつくりたいです
-
分岐処理(アルゴリズム)
-
特定のclassを表示、非表示にする
-
Javascript で可能でしょうか
-
APIを使って埋め込んだグーグル...
-
ASP.NETのコントロールの値をJa...
-
GoogleMap 住所から座標の取得
-
商品コードを入力で、商品名、...
-
javascriptにお詳しい方に質問...
-
アルファベットABCD…をスマート...
-
JavaScriptのindexedDBに格納し...
-
なぜmatchメソッドがエラーにな...
-
ホームページの最終更新日を他...
-
ページ最終行へジャンプする方法
-
GASでGoogleフォームの自動返信...
-
functionから別のfunctionを実...
-
javascriptで自動計算フォーム...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
google apps scriptの終了のさせ方
-
C#OpenCv V4にのエラーに関する...
-
メールフォームの日付入力フォ...
-
GASでundefinedエラーが出ます
-
ジェネレーターの作り方
-
GASでGoogleフォームの自動返信...
-
なぜmatchメソッドがエラーにな...
-
翌月を取得するGASが分かりません
-
ローカルにあるファイルを検索...
-
HTMLで作った時報アプリが動き...
-
ASP.NETのコントロールの値をJa...
-
C# 演算 奇数と偶数 表現の仕方
-
html javascript リンク先アド...
-
gas スプレッドシートがアクテ...
-
javascriptでテーブルに追加し...
-
VSCODE[Python]の設定について
-
JavaScriptで決まった「時刻」...
-
ASP.NET MVCでObjectをjsに渡す
-
イベントが初めの一回しか起き...
-
jqGridについて
おすすめ情報