タグ指定しないでタグのId取得する関数をNNでも動かしたい

このQ&Aのポイント
  • javaScriptを触り始めてまだ1週間の初心者です。NNでも動くようにするにはどこに手を加えたら良いのでしょうか?
  • 色々な種類のタグに指定されたIdから指定範囲に当てはまるIdをHTMLファイルの前から順に取得し、それを配列にセットする関数を作りたい。
  • IEではdocument.allを使用してそれらしく動いているのですが、NNでも動かしたいです。良い解決策がありましたらお願いいたします。
回答を見る
  • ベストアンサー

タグ指定しないでタグのId取得する関数をNNでも動かしたい

javaScriptを触り始めてまだ1週間の初心者です。 どうぞ熟練者の皆様、お知恵を貸して下さい。 「色々な種類のタグに指定されたIdから指定範囲("ABC"or"XYZ" + 000~999 の任意6文字)に当てはまるIdをHTMLファイルの前から順に取得し、それを配列にセットする」と言った関数を作りたいと思っています。 とりあえずIEではdocument.allを使用してそれらしく動いているのですが、これをNN環境でも動かしたいのです。NNで動くようにするにはどこに手を加えたら良いのでしょうか?それとも関数の作り自体変えるべきなのでしょうか? 良い解決策がありましたらお願いいたします。 該当部↓ var gArrayId = new Array(); function getSpanIDInfo() {  var intMaxNo = 0;  var intIndex = 0;  //配列宣言のため、まずは総数を調べる。  for ( var item in document.all ) {   // IDに"ABC"、"XYZ"を含むタグを見つける   if((item.indexOf("ABC") != -1) || (item.indexOf("XYZ") != -1)) {    intMaxNo = intMaxNo + 1;   }  }  //カウント終了したらその数でID情報配列作成  gArrayId = Array(intMaxNo - 1);  //作成した配列にIDを保存  for ( var item in document.all ) {   // "ABC"、"XYZ"を含むタグを見つける   if((item.indexOf("ABC") != -1) || (item.indexOf("XYZ") != -1)) {    // 見つけた順に保存    gArrayId[intIndex] = item.substring(0,7);    intIndex = intIndex + 1;   }  }  return intMaxNo; }

質問者が選んだベストアンサー

  • ベストアンサー
  • mrumesuke
  • ベストアンサー率45% (254/557)
回答No.1

NNというかNetscape 6以降になってしまいますが、総数を調べるループはこんな感じでしょうか。  elm = document.getElementsByTagName("*");  for ( i = 0; i < elm.length; i++) {   // IDに"ABC"、"XYZ"を含むタグを見つける   var item = elm[i].id;   if((item.indexOf("ABC") != -1) || (item.indexOf("XYZ") != -1)) {    intMaxNo = intMaxNo + 1;   }  } 配列にIDを保存する処理、ブラウザ振り分け処理は省略しても大丈夫とお見受けしました。

Kusuki
質問者

お礼

mrumesukeさま、ありがとうございました! 書きそびれていたのですが、Netscape6以降で動いてくれればそれで良かったので、おかげさまでバッチリ動作しております。 length…なるほど、こんな応用が…。 三日間回答が無かったらこの処理は諦めようと思っていましたので、とても助かりました。 本当にありがとうございました!!

関連するQ&A

  • 配列から指定した値を取得する関数

    $itemから["a"]の値だけを取り出した配列を呼び出す関数を作成したいのですが、この様な配列の場合はどうしたら良いのでしょうか? $item var_dump( $item ); array(1) { [0]=> object(data)#1 (5) { ["a"]=> int(1) ["b"]=> string(1) "2" ["c"]=> string(7) "string1" ["d"]=> string(7) "string2" ["e"]=> string(8) "keyword1" } [1]=> object(data)#2 (5) { ["a"]=> int(3) ["b"]=> string(1) "4" ["c"]=> string(7) "string3" ["d"]=> string(7) "string4" ["e"]=> string(8) "keyword2" } }

    • ベストアンサー
    • PHP
  • 目的地の座標がうまく取得されません

    お世話になります。 前の投稿後、なんとかプログラムを組んでみました。 しかし、ターゲットとなる <A id=abc name=abc>abc</a> が<table>タグの中にあると、うまく座標が取得されません。 <table>タグの外にあればうまく行きます。 解決策はあるのでしょうか? WindowsのIE6で動く様にしたいと思っております。 よろしくお願い致します。 ――――――――――――――――――――――――――――――――― <script> nowTop=0; function toScroll(AnchorID){ objAgent = navigator.userAgent.toUpperCase(); bro=(objAgent.indexOf("WIN") >= 0) ? true : false ; bro=(objAgent.indexOf("IE")>=0 && objAgent.indexOf("OPERA")<0) ? true : false ; if(bro){ nowTop=document.body.scrollTop; if(AnchorID){ pageScroll(document.all(AnchorID).offsetTop); }else{ pageScroll(0); } } } pageScrollTimer=""; beforTop=0; function pageScroll(DestinationTop){ nowTop+=Math.floor((DestinationTop-document.body.scrollTop)/10); window.scrollTo(0,nowTop); if((DestinationTop==document.body.scrollTop) || (beforTop==document.body.scrollTop)) { clearTimeout(pageScrollTimer); }else{ beforTop=document.body.scrollTop; pageScrollTimer = setTimeout("pageScroll("+DestinationTop+")",20); } } </script> <A onclick="toScroll('abc');return false;" href="#abc">abcへ</A> <table><tr><td> <A id=abc name=abc>abc</a> </table> ―――――――――――――――――――――――――――――――――

  • NN系でマウス座標取得

    お世話になります。 javascriptにてマウス座標を取得するファンクションを作成したいと 考えております。 そこで以下のソースでも取得可能だと思うのですが NN系でイベントが走らない場合でもマウス座標を 取得するファンクションを作成したいです。 すごく簡単なのかもしれませんが、ご教授宜しくお願い致します。 function getMouseY(e){  if(document.all) return document.body.scrollTop+event.clientY else if(document.layers||document.getElementById) return e.pageY }

  • NN4.7で、javascriptからのjavaの関数の呼び出し

    javaのアプレットの関数を、javascriptから呼び出して、検索結果を文字列として返し、 document.writeで、別のフレームに結果を書き出すというアプレットを作成しています。 それで、実行してみると、IE6,NN7では動作確認できましたが、NN4.7では、実行できませんでした。 ソースとしてどこかおかしいでしょうか? ------------javascript部分ソース----------- <HTML><HEAD> <script language="JavaScript"> <!-- function doSrch(fm) { var ss =""; ss = document.applets[0].execSrch(fm.SrchTxt.value); //ここで、document.applets[0]がないといわれる... if (ss == ''){ alert('該当するデータが見つかりませんでした。'); return false; } parent.result.document.location.href="result.html"; parent.result.document.write(ss); } //--> </script> ------------ここまで----------- といった感じです。 よろしくお願いします。

  • SafariのIframeで高さが取得できません

    <script language="JavaScript"> <!-- function frame_check(){ if(main.document.body){ if(navigator.userAgent.indexOf("Opera") != -1){ // 文字列に「Opera」が含まれている場合 var f = main.document.body.scrollHeight; } else if(navigator.userAgent.indexOf("MSIE") != -1){ // 文字列に「MSIE」が含まれている場合 var f = main.document.body.scrollHeight; } else if(navigator.userAgent.indexOf("Firefox") != -1){ // 文字列に「Firefox」が含まれている場合 var f = main.document.body.offsetHeight; } else if(navigator.userAgent.indexOf("Netscape") != -1){ // 文字列に「Netscape」が含まれている場合 var f = main.document.body.offsetHeight; } else if(navigator.userAgent.indexOf("Safari") != -1){ // 文字列に「Safari」が含まれている場合 var f = main.documentElement.offsetHeight; } if(f) document.getElementById("frame_set").height=f+20; setTimeout("frame_check()",100); }else{ setTimeout("frame_check()",100); } } setTimeout("frame_check()",10); --></script> <iframe name="main" id="frame_set" src="mainf.html" width="800" height="4000" frameborder="0" scrolling="no"></iframe> 上記のスクリプトを作成しましたが、IE7、 Firefoxではうまくいきますが、SafariではIframeに表示するページの高さが取得できません。 どこが問題なのかご教授お願いいたします。

  • イベントリスナーに設定した関数内で、id属性の値を取得するには

    IEでイベントリスナーに設定した関数で、イベントを発生させた要素のid属性値を取得する方法が分からずに困っています。 記述したコードは下記のようになります。Firefoxではうまく動作しました。 clickHandler内でFirefoxのe.currentTarget.idに対応するような処理はどのように行えばよいでしょうか。 ------------ JavaScript部分 ----------------------- function addEvent(elm, evType, fn, useCapture) { if (elm.addEventListener) { elm.addEventListener(evType, fn, useCapture); return true; } else if (elm.attachEvent) { var r = elm.attachEvent('on' + evType, fn); return r; } else { elm['on' + evType] = fn; } } function clickHandler(e) { var id; if (document.all && !window.opera) { // IEの場合に、ここの処理でid属性の属性地 hoge1やhoge2を取得したい。 // id = window.event.srcElement.id; これではだめ } else { id = e.currentTarget.id; } // idに応じた処理 } var elm1 = document.getElementById('hoge1'); var elm1 = document.getElementById('hoge2'); addEvent(elm1,'click',clickHandler,false); addEvent(elm2,'click',clickHandler,false); ------------ HTML部分 ----------------------- <li><a id="hoge1" href="#"><img src="●●" /></a></li> <li><a id="hoge2" href="#"><img src="●●" /></a></li> 先に進むことができずに困っています。よろしくお願いします。

  • 初心者です。

    初心者です。 すごく単純なことかもしれませんが、教えて下さい。 document.writeでdiv idの中身を取り出してみました。 それで並び変えてまた表示させたいと思っています。 最初は return を使って関数を呼び出してみましたが、受け取れず・・・ なんか難しいので、とりあえず以下のプログラムで画面に表示さえすれば あとはインフレームなどで対応しようかと思いました。 しかし、出力結果が一行しか表示されません。 アラートで出力すると、順番に表示されるのですか。 どなたか宜しくお願いします。 <script type="text/javascript"> function yomikomi(){ var selectObj = new Array(); var parents = new Array(); //配列を読み込む parents=Item(); //日付順にする alert(parents); parents.sort(); alert(parents); //return parents; for(i=0; i < parents.length; i++){ //ID_ だけ削除する。 if(parents[i]=='ID_'){ delete parents[i]; parents.splice([i],1); } selectObj[i] = document.getElementById(parents[i]); //小窓で確認 alert(selectObj[i].innerHTML); //★問題の箇所 画面には1行しか表示されない。 document.write(selectObj[i].innerHTML); } } </script> <script type="text/javascript"> function Item(){ var parents = Array( 'ID_' ,'201008012' ,'201007161' ); return parents; } </script>

  • 戻り値の中にタグを含め、タグとして機能させる方法

    JavaScript初心者です。 以下の様なプログラムで、戻り値の中にタグを含めたところ、 それがタグとしてではなく、文字として表示されて困っています。 お助け下さい。 プログラムの内容は、当該ページにアクセスした時、 訪れた人が、cookienameという名前のクッキーを持っていない場合は 登録が必要です、というメッセージを表示し、 クッキーを持っている場合は、そのクッキーの内容を<b>タグで挟んだものを 表示するプログラムです。 ですが、以下だと、<b>タグがタグとして機能せず、<b>という文字として 表示されてしまうのです。 よろしくお願い致します。 ----------------------------------------------- <script type="text/JavaScript" src="js/jquery.js"></script> <script type="text/JavaScript"> // クッキーの値を取得 getCookie(クッキー名); // function getCookie(cookiename){ var st=""; var ed=""; if(document.cookie.length>0){ // クッキーの値を取り出す st=document.cookie.indexOf(cookiename + "="); if(st!=-1){ st=st+cookiename.length+1; ed=document.cookie.indexOf(";",st); if(ed==-1) ed=document.cookie.length; var nakami=document.cookie.substring(st,ed); // クッキーがある場合、差し替え表示する内容(この中の<b>タグがタグとして機能しません) return "<b>"+nakami+"</b>"; } } return ""; } // クッキーがある場合、上記の内容を差し替え表示する function visitorName(){ if(getCookie('cookiename')){ var cookiename = getCookie('cookiename'); $("table.visitor").text(cookiename); } } $(function() { visitorName(); }); </script> </head> <body> <table class="visitor" border="0" cellspacing="0" cellpadding="0" width=220> <tr><td align="right">登録が必要です。</td></tr></table> </body> </html>

  • FC2ブログ タグのリンクについて

    FC2ブログでタグをリスト化しましたが右横に数字は出ているものの リンクはされずに文字化けしたページが出るのみです。 いろいろ調べましたがエンコードがうまくいってないのか他が違うのかが わかりません。 下記のテンプレートの修正以外にも良い方法があれば教えて下さい。 よろしくお願いします。 下記のテンプレートを使っています。 <ul id="【名前】"> <li><a href="【ブログのURL】?tag=【URLエンコードしたタグ1】">【タグ1】</a></li> <li><a href="【ブログのURL】?tag=【URLエンコードしたタグ2】">【タグ2】</a></li> </ul> <script type="text/javascript"><!-- function adCount(ID) { var A=document.getElementById(ID).getElementsByTagName("A"); var T=new Array(); var C=new Array(); var k=0; <!--ctag-->T[k]="<%ctag_name>";C[k]="<%ctag_count>";k++;<!--/ctag--> for(i=0;i<A.length;i++){ for(j=0;j<k;j++){ if(T[j]==A[i].innerHTML){ A[i].innerHTML+=(' ('+C[j]+')');break; } } } } adCount("【名前】"); //--></script>

  • PHP5でxml文書をパースする方法

    <?xml version="1.0"?> <root> <items>  <item>   <id>1</id>   <name>商品(赤)</name>   <price>1500</price>   <color>red</color>   <size>8</size>   <option>A</option>  </item>  <item>   <id>2</id>   <name>商品(青)</name>   <price>700</price>   <color>blue</color>   <size>3</size>  </item>  <item>   <id>3</id>   <name>商品(緑)</name>   <price>1200</price>   <color>green</color>   <size>5</size>   <option>C</option>  </item> </items> </root> 上記のようなXMLデータをPHPでパースし、 1つずつ、配列に入れていきたいと考えていますが、 問題なのは、 上から2番目の商品(青)には、<option>データが無いということです。 これは、この<option>が、オプションが有る時にだけ存在するタグだからです。 //----------------------------- <?php $doc->load($url); //上記xmlデータのあるURL:$url $array = array(); $i = 1; while($i <= 3){  //実際には、もっと商品数はあります。ここでは例として、3。  //配列の初期化  $item_array = array();  $items = $doc->getElementsByTagName('id');  $item_array['id'] = $items->item($i)->nodeValue;  $items = $doc->getElementsByTagName('name');  $item_array['name'] = $items->item($i)->nodeValue;  //*  //*同様のコードが続く  //*  $items = $doc->getElementsByTagName('option');  $item_array['option'] = $items->item($i)->nodeValue;  //*  //*同様のコードが続く  //*  //商品データが詰まった配列を、さらに配列に入れる  $array[] = $item_array; } //全ての商品のデータが詰まった配列を表示する。 print_r($array); ?> //----------------------------- このようなことがしたいわけです。 なお、タグ名を$tag_array = array('id','name',,,,,'option',,,)として、 foreach($tag_array as $tag){  $items = $doc->getElementsByTagName($tag);  $item_array[$tag] = $items->item($i)->nodeValue; } という風にした方が冗長ではないかとは思いますが、 それは、まぁ横に置いておきまして、 このコードで問題なのは、<option>が途中、つまり2番目で抜けると、 3番目の<option>データが、2番目の商品の<option>データとして配列に入ってしまうことです。 上から順に詰めて、配列に格納されてしまい、困っている、ということです。 <option>データが無い場合は、「ナシ」とでもしておきたいのですが、 どうしたら良いでしょうか? <item>を1つずつ   $items = $doc->getElementsByTagName('item'); で取得して、 各<item>の中の、<option>にアクセスする、なんて方法があるとベストなのですが、 そんな方法はありますでしょうか? firstChildですと、<item>の場合、<id>になってしまうため、<option>にはアクセスできません。 firstChild以降のChildには、どうやってアクセスしたら良いのでしょうね? どなたか、宜しくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう