• ベストアンサー

このスクリプトはどこが間違っているのでしょう

IE7b3です。次のスクリプトの実行時に「";" がありません」というエラーがでるのですが、なぜでしょうか。配列の定義が間違っているようなのですが・・・。 window.onload = function(e) { var w = 0; tbs = document.getElementsByTagName("div"); for (i = 0; i < tbis.length; i ++) { if (tbs[i].className == "tb") { array tbis = new Array(tbs[i].getElementsByTagName("img")); for (j = 0; j < tbis.length; j ++) { if (tbis[j].className == "tbi") { w = tbis[j].getAttribute("width"); alert(w); } } } } };

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

なんかラチがあかないので、 以下のスクリプトを試して貰えますか。 IE6, Firefox1.5 では(意図するように?)動きます。 IE7 になったからと言って動かないなんてちょっと考えにくいので。 ---------------------------------------------------------------- window.onload = function(e) { var w = 0; tbs = document.getElementsByTagName("div"); for (i = 0; i < tbs.length;i++) { if (tbs[i].className == "tb") { tbis = tbs[i].getElementsByTagName("img"); for (j = 0; j < tbis.length; j++) { if (tbis[j].className == "tbi") { w = tbis[j].getAttribute("width"); alert(w); } } } } };

KanjiTalk
質問者

お礼

ありがとうございます!私のスクリプトが間違っていました。本当にお世話になりました。

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#2>試したのですが、varで宣言した変数は配列にはなれないということでエラーになります。 IE7から厳しくなったのかな? 色々疑問を感じます(おそらく別の間違いだと)が var tbis = new Array(); にしてみたら。

KanjiTalk
質問者

補足

それでも同じ理由でエラーになってしまうようです。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1>としてしまうと、"tbisは宣言されていません"とエラーになります。 >tbs = document.getElementsByTagName("div"); がエラーにならないのに? もし言われていることがホント(別の間違いが原因でない)なら var w = 0; var tbis; とかしておけばいいのでは?

KanjiTalk
質問者

補足

試したのですが、varで宣言した変数は配列にはなれないということでエラーになります。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

IE7 は、使ってないので自信なしですが >for (i = 0; i < tbis.length; i ++) { for (i = 0; i < tbs.length; i++) { >array tbis = new Array(tbs[i].getElementsByTagName("img")); tbis = tbs[i].getElementsByTagName("img");

KanjiTalk
質問者

補足

tbis = tbs[i].getElementsByTagName("img"); としてしまうと、"tbisは宣言されていません" とエラーになります。 配列を宣言しようにも内容が確定していないので。

関連するQ&A

  • このコードを処理速度向上させることはできますか?

    このコードを処理速度向上させることはできますか? <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript"> //<![CDATA[ function className(str){ var alltag = document.getElementsByTagName("*"); var ary = []; for(var i=0;i<alltag.length;i++){ if("."+alltag[i].className == str){ ary.push(alltag[i]); } } return ary; } window.$ = function(str){ var ID = str.match(/^#(\w+)/), CLASS = str.match(/^\.(\w+)/), TAG = str.match(/^(\w+)|(\*)/), node = str.match(/^doc/)? document: TAG? document.getElementsByTagName(RegExp.$1==""?RegExp.$2:RegExp.$1): ID? document.getElementById(RegExp.$1): CLASS? navigator.appVersion.toLowerCase().indexOf("msie")? className(str): document.getElementsByClassName(RegExp.$1): null; this.style = function(css){ css = css.split(/\:|\;/); if(ID){ for(var j=0;j<css.length;j++) node.style[css[j].replace(/\s+/g,"").replace(/\-(\w)/,function($1){$1=$1.substr(1);return $1.toUpperCase()})] = css[j+1]; }else{ for(var i=0;i<node.length;i++){ for(var j=0;j<css.length;j++) node[i].style[css[j].replace(/\s+/g,"").replace(/\-(\w)/,function($1){$1=$1.substr(1);return $1.toUpperCase()})] = css[j+1]; } } } return this; } window.onload = function(){ var st = new Date().getTime(); for(var i=0;i<10000;i++){ $('#wrap').style("color:#00f; background:#f00; border-left:10px solid #000;"); $('div').style("border-right:10px solid #000; width:100px; height:100px; margin:10px;"); $('.cl').style("border-top:10px solid #000; background:#00f;"); } var end = new Date().getTime(); alert(end-st); } //]]> </script> <title></title> </head> <body> <div id="wrap">aaaaa</div> <div class="cl">bbb</div> <div class="cl">ccc</div> </body> </html> 他にも、もっとこうしたほうが…等ありましたら教えてください。どうか宜しくお願いします。

  • 下記のスクリプトを高速にする具体的な方法

    下記のスクリプトを高速にする具体的な方法 現在、特定のクラスを表示、非表示にしたいと 考えております。 下記のスクリプトだとIEでの動作が遅いので改善方法を模索しております。 どなたかご教授ください。 宜しくお願いいたします。 <script type="text/javascript"> var ids = new Array(); ids = ['default','aaa','bbb']; function change(site){ if(!document.getElementsByTagName){return;} var objs = document.getElementsByTagName('*'); var check = ids.join('|'); var re = new RegExp('(?:^|\\s)'+site+'(?:$|\\s)'); for(var i=0; i<objs.length; i++){ var obj = objs.item(i); if(re.test(obj.className)){ obj.style.display = ''; }else{ if(obj.className){ if(obj.className.match(check)){ obj.style.display = 'none'; }else{ obj.style.display = ''; } } } } } </script> <html> <select name="site_change" id="site_change" onchange="change(this.value)"> <option value="default">デフォルト</option> <option value="aaa">aaa</option> <option value="bbb">bbb</option> </select> <div class="aaa bbb">aaa bbb</div> <div class="aaa">aaa</div> </html>

  • 同じ i 番目のclassを連動させることはできますか?

    お世話になります <script type="text/javascript"><!-- window.onload = function() { document.getElementsByClassName = function (className) { var i, j, eltClass; var objAll = document.getElementsByTagName ? document.getElementsByTagName("*") : document.all; var objCN = new Array(); for (i = 0; i < objAll.length; i++) { eltClass = objAll[i].className.split(/\s+/); for (j = 0; j < eltClass.length; j++) { if (eltClass[j] == className) { objCN.push(objAll[i]); break; } } } return objCN; } obj0 = document.getElementsByClassName("id"); obj1 = document.getElementsByClassName("pass"); for(i=0;i<obj0.length;i++) { obj0[i].onclick = function() { obj1[i].style.display = "block"; } } } //--></script> <style type="text/css"><!-- .id { width:150px; float:left; cursor:pointer; } .pass { display:none; } .pass0 { width:100px; } --></style> <div class="id">名前1</div> <div class="pass"> <input type="password" name="password" class="pass0"> <input type="button" name="login" value="LOG IN" class="login"> </div> <div class="id">名前1</div> <div class="pass"> <input type="password" name="password" class="pass"> <input type="button" name="login" value="LOG IN" class="login"> </div> のような感じでclass("id")[0]をクリックしたらclass("pass")[0]を表示、class("id")[1]をクリックしたらclass("pass")[1]を表示・・・というふうにしたいのですがなかなかうまくいきません>< 名前とパス両方を入力にしてやる方法もできますし、 それぞれのclass("id")にfunction()を振って obj0[0].onclick = function() { obj1[0].style.display = "block"; } obj0[1].onclick = function() { obj1[1].style.display = "block"; } のようなやり方もできるのはできます 後者のやり方は他の部分でもいろいろ使っているので記事やメンバーが増えるたびに新たに追加していかないといけないので***.onclick = function() { } を配列にするなどまとめてできる方法があれば教えていただきたいのですが^^;

  • htmlファイルでするとできるのにcgiファイルでするとできないのはなぜでしょう?

    お世話になります <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> <title>com</title> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript"><!-- window.onload=function() { document.getElementsByClassName = function (className) { var i, j, eltClass; var objAll = document.getElementsByTagName ? document.getElementsByTagName("*") : document.all; var objCN = new Array(); for (i = 0; i < objAll.length; i++) { eltClass = objAll[i].className.split(/\s+/); for (j = 0; j < eltClass.length; j++) { if (eltClass[j] == className) { objCN.push(objAll[i]); break; } } } return objCN; } obj = document.getElementsByClassName("trans_e"); for(i=0;i<obj.length;i++) { l = obj[i].innerHTML; obj[i].style.width = l + "px"; } } //--></script> <style type="text/css"><!-- .trans_a { float:left; width:20px; } .trans_b { float:left; width:100px; } .trans_c { margin-top:10px; } .trans_d { float:left; width:200px; } .trans_e { background-color:red; margin-bottom:2px; } --></style> </head> <body> <div> <div class="trans_a">&nbsp;</div> <div class="trans_b"><img src="./img/non.png" alt="$shuzoku"> <div class="trans_c">$type</div></div> <div class="trans_d"> <div class="trans_e">41</div> <div class="trans_e">40</div> <div class="trans_e">47</div> <div class="trans_e">35</div> <div class="trans_e">22</div> <div class="trans_e">11</div> </div> </div> </body> </html> このようにclass="trans_e"のところをその中に書かれている数値で幅を可変させようとしているのですがhtmlファイルで試すと思ったようなことをしてくれるのですがcgiファイルに組み込むと幅が100%のまま変わらないのですが解決策をご存知の方いらっしゃいますでしょうか? getElementByIdですればできるのですが結構数があるものですので・・・--;

  • 何が悪いのでしょうか。

    <html> <head> <title>たいとる</title> <script> baguru = new Array(); window.onload=function(){ var tags=document.getElementsByTagName("*"); for(var i=0;i<tags.length;i++){ matti = tags[i].id.match(/^test[0-9]+$/) if(matti){ baguru.push(matti); } } } xx = new Array(),xx[0]="test123",xx.push('test30'),xx.push('test200','test1'),str=xx[1]; yy = new Array("disp1", "disp200", "disp30"),stl=yy[1]; </script> </head> <body> <div id="test123">TEST123</div> <div id="test30">TEST30</div> <span id="test200">TEST200</span> <div id="test1">TEST1</div> <div id="hoka123">HOKA123</div> <hr> アドレスバーでTEST用。 <pre> javascript:alert(xx[1].match(/disp(\d+)$/)[1]); javascript:alert(yy[1].match(/disp(\d+)$/)[1]); javascript:alert(baguru[1]);//中身はある javascript:alert(baguru[1].match(/disp(\d+)$/)[1]);//反応無し </pre> <pre> javascript:alert(xx); javascript:alert(yy); javascript:alert(baguru); </pre> </body> </html> 数字部分だけをアラートで出したいのですが、配列baguruが反応しません。何が悪いのでしょうか

  • テキストサイズ拡大・縮小のJavascriptについて

    テキストサイズ拡大・縮小のJavascriptについて よろしくお願い致します。 下記のようなコードを使用して、サイト内のHTMLテキストを拡大・縮小させたいと思っています。 //*********************************** //テキストの拡大・縮小 //*********************************** var tgs = new Array( 'div','span' ); //Specify spectrum of different font sizes: var szs = new Array( '12px','14px' ); var startSz = 1; function ts( trgt,inc ) { if (!document.getElementById) return var d = document,cEl = null,sz = startSz,i,j,cTags; sz += inc; if ( sz < 0 ) sz = 0; if ( sz > 1 ) sz = 1; startSz = sz; if ( !( cEl = d.getElementById( trgt ) ) ) cEl = d.getElementsByTagName( trgt )[ 0 ]; cEl.style.fontSize = szs[ sz ]; for ( i = 0 ; i < tgs.length ; i++ ) { cTags = cEl.getElementsByTagName( tgs[ i ] ); for ( j = 0 ; j < cTags.length ; j++ ) cTags[ j ].style.fontSize = szs[ sz ]; } } この場合、「var tgs = new Array( 'div','span' );」で指定している、divとspanに含まれるテキストに対して拡大・縮小が適用されるのだと思いますが、特定のdiv要素(<div id="hogehoge">内のテキストなど)を拡大・縮小させないようにするには、どのようなコードを追加すればよいのでしょうか。 もしよろしければ、ご教授頂けると幸いです。 どうぞよろしくお願い致します。

  • content scriptについて質問です

    閲覧ありがとうございます。 あるサイトで拾ったグーーグルクロームのcontent scriptを実行したいのですが、なかなか動いてくれません。 内容は、 モバゲーのゲーム神撃のバハムートでのバザーで勝手に最安値のアイテムを買ってくれるというscriptです。 それがこちらです。 var divs = document.getElementsByTagName("div"); var forms; for(var i=0; i < divs.length; i++) {   if(/キュアウォータ\([100-110]{0,2}\)/.test(divs.innerText)){     forms = divs[i].parentNode.getElementsByTagName("form");     if(forms.length !== 0) inputs[0].submit();   } } これをそのままjsファイルにして、作ったマニフェストファイルと一緒にパッケージ化しました。 ミス出品を拾わないように少し数字はいじりましたが、関係ないようです。 何がおかしいのでしょうか?ご指摘よろしくお願いします

  • getElementsByClassについて

    こんにちは。 http://www.dustindiaz.com/top-ten-javascript/のgetElementsByClass関数を使って 指定したクラスのクラスを書き換えたいのですが どのようにすればいいかわかりません。 ------------------------------------------------------------------- function getElementsByClass(node,searchClass,tag) { var classElements = new Array(); var els = node.getElementsByTagName(tag); // use "*" for all elements var elsLen = els.length; var pattern = new RegExp("\\b"+searchClass+"\\b"); for (i = 0, j = 0; i < elsLen; i++) { if ( pattern.test(els[i].className) ) { classElements[j] = els[i]; j++; } } return classElements; } function SwitchClass() { getElementsByClass('show').className = 'hide'; } ------------------------------------------------------------------- のような感じでクラスを書き換えたいです。 getElementsByIdでいいじゃないって思うかもしれませんが、どうしてもClassで指定したいんです。 どうかよろしくお願いします。m(_ _)m

  • 要素がひとつの配列は問題ありますか?

    DIVを全て非表示にし、display_listにあるものを表示させる事をしようとしています。 しかし、display_listに入れる配列の要素が一つしかないところでundefinedが出てしまい上手く行きません。 要素が一つの配列は問題ありますでしょうか? どうすれば上手く行くようになりますでしょうか? <html> <head> <script type="text/javascript"> var cat_list = ['media_type','print_type','option_opp','option_setup']; var display_list = new Array(); display_list['media_type'] = new Array(1,2); display_list['print_type'] = new Array(1,2); display_list['option_opp'] = new Array(1); display_list['option_setup'] = new Array(1); var item_list = new Array(); item_list['media_type'] = new Array('media_type_cd','media_type_dvd'); item_list['print_type'] = new Array('print_type_inc','print_type_thermo'); item_list['option_opp'] = new Array('option_opp'); item_list['option_setup'] = new Array('option_setup'); </script> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> <script type="text/javascript"> $(document).ready( function(){ for(var i=0; i<cat_list.length; i++){ //alert(cat_list[i]); for(var j=0; j<item_list[cat_list[i]].length; j++){ //alert(j); //alert(cat_list[i]); //alert(item_list[cat_list[i]][j]); $('#'+item_list[cat_list[i]][j]).hide(); } } for(var i=0; i<cat_list.length; i++){ //alert(cat_list[i]); for(var j=0; j<display_list[cat_list[i]].length; j++){ //alert(j); //alert(cat_list[i]); //alert(display_list[cat_list[i]][j]); //alert(item_list[cat_list[i]][display_list[cat_list[i]][j]-1]); $('#'+item_list[cat_list[i]][display_list[cat_list[i]][j]-1]).show(); } } }); </script> </head> <body> <div id="media_type_cd">media_type_cd</div> <div id="print_type_inc">print_type_inc</div> <div id="option_opp">option_opp</div> <div id="option_setup">option_setup</div> </body> </html>

  • 特定のclassが含まれていたら

    以前、こちらで特定のclassを表示、非表示にする方法を教えていただいたのですが、特定のclassが含まれているタグに対して表示、非表示にしたいと思いまして、質問させていただきました。 現在は<div class="a">a</div>に対して行っており、これを <div class="a b">ab</div>のような感じにも対応したいと考えております。 現在使っているスクリプトは下記になります。 どなたかご教授ください。 宜しくお願いいたします。 function change(site){ if(!document.getElementsByTagName){return;} var cname = new Array(); cname["default"] = new Object("a" == site ? "":"none"); cname["homes"] = new Object("b" == site ? "":"none"); cname["suumo"] = new Object("c" == site ? "":"none"); var objs = document.getElementsByTagName("*"); for(var i=0;i<objs.length;i++){ if(cname[(objs[i].className)] != undefined){ objs[i].style.display = cname[(objs[i].className)]; } } s_n = document.getElementById('site_name'); s_n.value = site; }

専門家に質問してみよう