• ベストアンサー

DOMについて教えてください

DOMについて教えてください classの名前が class="abc"となっている時、下記のようなコードでヒットします。 IDの名前が id="def"となっている時、If objE.idName = "def" Thenなんて書くとエラーになります。 この場合どういうふうに書けばいいんでしょうか。 For Each objE In div2.getElementsByTagName("DIV") If objE.className = "abc" Then htmData1 = objE.innerText

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5059/13218)
回答No.2

> idNameってないんですか https://msdn.microsoft.com/ja-jp/library/system.xml.xmlelement%28v=vs.110%29.aspx 無さそうですね。 Name プロパティじゃないでしょうか。

okidsaya555
質問者

お礼

違うかな?

その他の回答 (1)

  • t_ohta
  • ベストアンサー率38% (5059/13218)
回答No.1

idの場合、配列が返ってくる訳じゃないから、For Eachでエラーになってるとか。

okidsaya555
質問者

お礼

「オブジェクトはこのブロパティまたはメソッドをサポートしていません」 というエラーなんです、idNameってないんですか。

関連するQ&A

  • VBAオブジェクト変数またはWithブロック変数

    Access VBAについてお教えください。 VBAを使用しています。下記のようなコードでDOMの値を取得しようと思っています。 If IsNull(IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText) Or _ IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText = "" Then stocker = "" Else stocker = IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText End If IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText)にデータがある場合は、 問題なくstockerに値をセットすることができます。 ただし、IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText)にデータ(要素)が なにも無い場合は、エラーが発生します。 「実行時エラー91;オブジェクト変数またはWithブロック変数が設定されていません」 IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText)にデータが無い場合は、NULLが 帰ってくるとサイトで見かけたので、IF文を使って回避しようと思いましたが、成功しませんでした。 何が悪いと考えられるでしょうか?

  • onclickを使わずにクリック元を特定したい

    onclickを使えばクリック元の位置を判断することができますが、 onclickばかりが並ぶのはよろしくないとききました。 そこで、イベントリスナーを使うことにしました。 しかし、onclickを使わずに位置を特定することができません。 サンプルではthis.targetで取得できないか試してみましたが t.style.backgroundColorでtの部分でエラーになります。 onclickを使わずにクリック元を特定する方法はないでしょうか。 <div id="id"> <div id="sample129" class="cn"> <div>~</div> <div>~</div> </div> <div id="sample128" class="cn"> <div>~</div> <div>~</div> </div> ~1まで続く~ <div id="sample1" class="cn"> <div>~</div> <div>~</div> </div> </div> <script type="text/javascript"> var dom = document.getElementById('id'); var cds = dom.childNodes; if(cds[1].className=="cn"){ cds[1].addEventListner('click',fg(this.target),false); } function fg(t) { t.style.backgroundColor = "#000000"; var url = "http://test/" + t.id + "/"; window.open(url); } </script>

  • class追加でロールオーバーするDOMのjavascript

    イベントハンドラをjs内に内包したロールオーバーを作成していて、 解決できない問題が発生しています。 リンクボタンをクリックして次のページに遷移したあと、 ブラウザの戻るボタンで戻るとonmouseover時の状態で戻ってしまいます。 原因はonunloadが動作がしていないためと思います。 onunloadをonclickにするとこの問題は回避はできますが、 クリックしたら必ず別ページに遷移しなければいけなくなります。 このスクリプトは必ずしもaタグでなくてもロールオーバーできるようにしたいのでうまい解決策ではありません。 何かよい解決方法はありますでしょうか。 // javascript start window.onload = function() { if(!document.getElementsByTagName) return false; var AddClass = document.getElementsByTagName("*"); for(var i=0;i<AddClass.length;i++){ if(AddClass[i].className.match("^(.+? )?addclass.+?( .+?)?$")){ if (document.all){ // IE AddClass[i].onmouseover = AddClassOn; AddClass[i].onmouseout = AddClassOff; AddClass[i].onunload = AddClassOn; }else{ AddClass[i].addEventListener("mouseover", AddClassOn, false); AddClass[i].addEventListener("mouseout", AddClassOff, false); AddClass[i].addEventListener("unload", AddClassOff, false); } } } function AddClassOn() { id_name = this.className.replace(/^(.+? )?addclass_(.+?)_.+?( .+?)?$/i,"$2"); class_name = this.className.replace(/^(.+? )?addclass_.+?_(.+?)( .+?)?$/i,"$2") var classNameOG = document.getElementById(id_name).className; var id_Node = document.getElementById(id_name); var createAttr = document.createAttribute("class"); createAttr.nodeValue = classNameOG + " " + class_name; id_Node.setAttributeNode(createAttr); } function AddClassOff() { id_name = this.className.replace(/^(.+? )?addclass_(.+?)_.+?( .+?)?$/i,"$2"); class_name = this.className.replace(/^(.+? )?addclass_.+?_(.+?)( .+?)?$/i,"$2") var classNameOG = document.getElementById(id_name).className.replace(class_name,""); var id_Node = document.getElementById(id_name); var createAttr = document.createAttribute("class"); createAttr.nodeValue = classNameOG; id_Node.setAttributeNode(createAttr); } } // javascript end /* style start */ .changeclass{ padding:4px; background:#ff0; border:1px solid #f00; } /* style end */ /* html start */ <body id="knowhow" class="body_test"> <ol> <li><a href="test.html"><img src="image/list01.gif" class="addclass_knowhow_changeclass" width="64" height="64" alt="ボタン" /></a></li> </ol> </body> /* html end */ ちなみに現状のスクリプトはidだけにclass追加するように作っていますが、 最終形は追加するclassのid指定部分をbodyやparentやthisにすることで、 id以外にもclassが追加できる仕様にする予定です。 よろしくお願いいたします。

  • JavaScript 可変スクロールバーについて

    http://manos.malihu.gr/tuts/jquery_custom_scrollbar.html こちらに掲載されているスクロールバーを引用してサイトを作っていますが、 このまま使おうとすると、 <div class="content"></div>内の内容がheight以上であれば、指定位置にスクロールバーが出てきますが、 私が行いたいことは、 <div class="content" id="id1"> ここにコンテンツを書き込む </div> <div class="content" id="id2"> <a name="abc">abc</a> <div id="123"> something_123 </div> <a name="def">def</a> <div id="456"> something_456 </div> </div> id1およびid2はボタンによって表示が切り替わるようにしてあり、 id2内のclassは<a>タブによって表示、非表示が可能です。 この時に、初期状態ではid1を表示させるとしたとき、 id1の内容がheightに指定した高さより小さく、 id2の内容を全て展開させるとheightの値を上回るとすると、 id2を展開させても、スクロールバーが表示されないことで困っています。 どのようにJavascriptのコードを書き換えれば、可変するDivに対応するようになるでしょうか?

  • テキストのみの場合はinnerHTMLを使うべきか

    innerHTMLはIE,Firefox,Chorme,safariでも対応しています。 innerTextやtextContentはブラウザによって対応が違いので、 /*@cc_on @if(1) innerText @else@*/ textContent /*@end@*/ のようにして対応させます。 <div></div>の中がテキストのみの場合は、どちらを使った方がよいでしょうか。 innerHTMLはよろしくないと聞いたことがあるのですが、それは <div></div>の中にタグが含まれる場合に問題が起きてくるということでしょうか。 <div>テキストテキストテキスト</div> <div>テキストテキストテキスト</div> <div>テキストテキストテキスト</div> getElementsByTagName('div')[1].innerHTML getElementsByTagName('div')[1]./*@cc_on @if(1) innerText @else@*/ textContent /*@end@*/

  • 同じ 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() { } を配列にするなどまとめてできる方法があれば教えていただきたいのですが^^;

  • C# htmlの一部の文字取得

    C#のwebBrowserで表示されているtextを表示させたいです。 htmlが <div class="AAA"> BBB </div> となっており、BBBのtextを取得したい場合、 HtmlElementCollection elem = webBrowser0.Document.GetElementsByTagName("div");   foreach (HtmlElement element in elem)   {    if (element.GetAttribute("class") == "AAA")  {  str = element.InnerText;  } } と、しましたが、上手く取得出来ません。 ご教授頂ければ助かります。

  • onmouseover="this.className=をjsファイルにまとめて、指定する場所はid=menu1,2~....かclass=menuで統一したい

    <div class="font1 bor1" onmouseover="this.className=this.className+' bgcol txcol'" onmouseout="this.className='font1 bor1'"> というものがあったとしてこれを <div id="menu1・・・2・・・">だけにして onmouseover=~をjsに略記できるようにしたいのですが 何かいい手はありませんか? idで指定できる版のほかに classで指定できる版があるとうれしいです。classだと難しいでしょうか? また、こちらももしできればでいいのですが、this.classNameを 指定IDのclassName等もできるのでしょうか? 質問に不足があれば答えられる範囲で答えます。よろしくお願いします。

  • JavascriptでInputClassの表示を変えるには

     以下のScriptを作りました。Tagの表示情報をScriptで変更したいのです。以下のdiv class="inC1"は変更されます。input class="inIPC2も変更したいのですが、どうもやり方が異なるようです。  申し訳ありませんがご教授願います。 <html> <head> <title>エレメントの表示</title> </head> <body> <script type="text/javascript"> function Disp_change() { var i = 0, div = document.getElementsByTagName("DIV"); while (div[i]) { if (div[i].className=="inC1") div[i].innerHTML = "change1"; i++; } } function Disp_change_Class() { var i = 0, div = document.getElementsByTagName("DIV"); while (div[i]) { if (div[i].className=="inIPC2") div[i].innerHTML = "change2"; i++; alert ("change2"); } } </script> <body> <div class="frameHead frameDetail"> <div class="inC1">連絡情報</div> <div class="clear"><hr /></div> <div class="inC2"> <input class="button3" type="button" name="fromUserList" value="" onclick="Disp_change()"> <input class="inIPC2">連絡情報</div> </div> <script type="text/javascript"> Disp_change(); Disp_change_Class(); }; </script> </script> </body> </html>  一応動きますので確認してみてくだされば幸いです。 以上、宜しく御願い致します。

    • ベストアンサー
    • Java
  • dom要素のhtml取得について-get()

    dom要素のhtml取得について-get()メソッドを使用するのがいいのか? don要素のhtmlを取得したいと考えていますが うまくいきません。 以下htmlです。 ------------------------------------------------- <div id="hoge"> <div class="day-number">16</div> <div class="kurasuhoge"><a href="http://hogeURL.com" class="anker">○</a></div> <div class="day-number">17</div> <div class="kurasuhoge"><a href="http://hogeURL2.com" class="anker">○</a></div> </div> ------------------------------------------------- この中のアンカータグを取得し配列に格納したいです。以下のように格納出来れば理想です。 var hairetsu = {16:'<a href="http://hogeURL.com" class="anker">○</a>',17:'<a href="http://hogeURL2.com" class="anker">○</a>']; まずはアンカータグを取得と思い以下を書きました。 ------------------------------------------------- var hensu = $("#hoge .anker").parent().get(); alert(hensu); ------------------------------------------------- 結果[object HTMLDivElement],[object HTMLDivElement] と表示されてしまいます。 今getメソッドを使用していますが 他にいいメソッドがあればアドバイスいただけたら嬉しいです。 まとめますと 「#hogeの中の.anker要素をもつhtmlソースを摘出し配列に格納したいです。」 修正方法をご教示いただければ幸いです。