• ベストアンサー

テキストノードを非表示にできません

いつもお世話になります。 <div id="ida"> <div>aaaaaaaaaaaa</div> </div> のとき、 elemDiv=document.getElementById("ida"); var nodes=elemDiv.childNodes; for(i=0;i<nodes.length;i++) {   var node=nodes[i];   if(node.nodeName.toLowerCase()=='div'){     node.style.display='none'   } } とすれば、<div>aaaaaaaaaaaa</div> は、表示されなくなります。 ここで、 <div id="ida"> aaaaaaaaaaaa </div> として、つまり文字列を<div>で囲まないようにして for(i=0;i<nodes.length;i++) {   var node=nodes[i];   if(node.nodeName=='#text'){     node.style.display='none'   } } とすると、「aaaaaaaaaa」が非表示となりません。 テキストノード自体を非表示にすることはできないのでしょうか。 よろしくお願いいたします。

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

  • ベストアンサー
回答No.1

できない。 DOM 2 Traversal and Range http://www.w3.org/TR/DOM-Level-2-Traversal-Range/idl-definitions.html のsurroundContentsでも何でもいいから、要素に突っ込んでから、その要素にスタイルを当てるしかない

rqg2010
質問者

お礼

himajin100000さん、早速レスありがとうございます。 そうですか。 もう一つ要素を作成する方法で考えます。 どうもありがとうございました。

その他の回答 (1)

  • tochansa
  • ベストアンサー率76% (23/30)
回答No.2

↓状態でaaa...を非表示にしたいなら <div id="ida"> aaaaaaaaaaaa </div> elemDiv=document.getElementById("ida"); elemDiv.style.display='none' で良いんじゃないの?余計なDiv消したいんだけどーみたいに受け取ったんですが。。。 テキストノード自体については先の回答者さんの仰る通りできません

rqg2010
質問者

お礼

tochansaさん、早速レスありがとうございます。 >余計なDiv消したいんだけどーみたいに受け取ったんですが。。。 結局は、そういうことになるのかな。 よく考えてみます。 どうもありがとうございました。

関連するQ&A

  • DOMを使ったjavascript「続きを読む」(表示/非表示 切替え)初期値変更について

    以下は拾ってきたもので、 長い文章の途中に「続きを読む」などと入れて 内容を隠しておくのに使えるものだと思いますが、 設置してみたところ初期値で表示状態になっています。 これを非表示にするには どの値を変更すれば良いでしょうか。 javascriptの知識がないので、教えて下さい。 // イベントリスナーの追加 function addEvent(node, evt, func) { if (node.addEventListener) { node.addEventListener(evt, func, false); } else if (node.attachEvent) { node.attachEvent("on" + evt, func); } } // イベントがあった要素を得る function getTarget(e) { if (e.target) { return e.target; } else if (e.srcElement) { return e.srcElement; } } // イベントリスナーの割り当て function setHandler() { // 文書内のdiv要素を列挙する var divElements = document.getElementsByTagName('div'); for (var i = 0; i < divElements.length; i++) { // div要素の直下の階層にあるh4要素を得る var h4Element = divElements[i].getElementsByTagName('h4')[0]; // h4要素のclickイベントにイベントリスナーを割り当てる addEvent(h4Element, "click", showHide); } } // h4要素と同じ階層にあるp要素の表示/非表示を切り替える function showHide(e) { // クリックされたh4要素を得る var h4Element = getTarget(e); // h4要素と同じ階層にあるp要素を得る var parent = h4Element.parentNode; var pElement = parent.getElementsByTagName('p')[0]; // p要素の表示/非表示を切り替える pElement.style.display = (pElement.style.display == 'none') ? '' : 'none'; } // イベントリスナーを割り当てる addEvent(window, "load", setHandler);

  • 表示・非表示の度にURLにパラメーター表示

    初心者なので間違っていることもあるかもしれませんが、よろしくお願いします。 サーバーサイドの言語ではないので無理だろうなとは思っていますが、念の為に詳しい方にお聞きしたいことがあります。 現在サイトを開設していてリンクをクリックしたらその下にサンプルテキストが表示・非表示で切り替わるようにしています。 1ページにこのような表示・非表示のリンクを多数設置しているのですが、クリックして表示させても当然URLはそのままです。 これをクリックした場合、例えば下記のようにすることはできるでしょうか? http://○○.com/sample.html ↓ http://○○.com/sample.html?test このようにパラメーター?がついたURLにして表示させたりしたいのですが。そのURLにアクセスすれば、現在表示させているのがすぐ見れるように。 よくPHPやCGIでみられるやつです。 ソースは下記のようにしています。 □HTMLファイル <a href="#" class="player" onClick="showHide('TEST');return false;">テスト</a> <div id="TEST" style="display: none">サンプルテキスト</div> □外部JSファイル var objTextIDArray = new Array("TEST"); function showHide(targetID) { //functionの宣言。受けとったIDは変数targetIDに格納。 if( document.getElementById(targetID)) { //指定のIDのついたオブジェクトがあったら処理する //指定されたIDのstyle.displayがnoneなら if( document.getElementById(targetID).style.display == "none") { //blockに変更する for(var i = 0; i < objTextIDArray.length; i++) if(document.getElementById(objTextIDArray[i])) document.getElementById(objTextIDArray[i]).style.display = "none"; document.getElementById(targetID).style.display = ""; } else { //noneでなければ、つまりblockなら //noneにする document.getElementById(targetID).style.display = "none"; Javascriptに詳しい方に無理と言われれば諦めつくのですが。もしかしたら何か方法があるかもと思いました。 ご存知の方いらっしゃいましたら、ご教示ください。 よろしくお願いします。

  • 文字列の表示/非表示

    下記のコードで、ボタンを押すたびに、 sample1 sample2 sample3 の3個の文字列の非表示/表示が切り替わるようにしたいのですが、 alert(elements.length+"個の要素を取得しました"); の実行で、class="sample"のエレメントの個数は正しく取得できているようなのですが、 elements.style.display = elements.style.display == "none" ? "block" : "none"; で非表示/表示が切り替わってくれません。 何か書き方が悪いのでしょうか? ご経験のある方、御教示ください。 <html> <head> <title>document.getElementsByClassName - class名を元にエレメントを取得する</title> </head> <!--class名を元にエレメントを取得するのサンプル--> <script type="text/javascript" src="prototype.js"></script> <script type="text/javascript"> <!-- function execute() { var elements = document.getElementsByClassName("sample"); alert(elements.length+"個の要素を取得しました"); elements.style.display = elements.style.display == "none" ? "block" : "none"; } //--> </script> <body> <div id="sample1" class="sample" style="display:none;">sample1</div> <div id="sample2" class="sample" style="display:none;">sample2</div> <div id="sample3" class="sample" style="display:none;">sample3</div> <button onclick="execute()">サンプル実行</button> </body> </html>

  • 別ページのインラインフレームに表示させる方法

    別ページのインラインフレームに表示させる方法 こんにちは。いつもお世話になっております。 数日前に自閉式ツリーについて質問させていただきました。 ありがとうございました。 http://okwave.jp/qa/q5526156.html --------------------------------------------------------------- <script type="text/javascript"> <!-- function tree2(menu_class,menu_id) { var div=document.getElementById(menu_id); if (div.style.display == "block") div.style.display="none"; else { var sib=div.parentNode.childNodes; for (var i=0; i < sib.length; i++) if (sib[i].className == menu_class) sib[i].style.display="none"; div.style.display="block"; } } // --></script> <style type="text/css"> <!-- .tree { display:none; } --></style> <p><a href="javascript:tree2('tree','menu1');" title="展開">展開</a></p> <div class="tree" id="menu1"> <ul> <li><a href="a.html" title="あ" target="frame">あ</a></li> <li><a href="aa.html" title="ああ" target="frame">ああ</a></li> </ul> </div> --------------------------------------------------------------- 【参考ページ】http://amenti.usamimi.info/treemenu2.html というふうに作っているのですが、たとえばAページの上記ツリーをクリックした際に内容がBページのインラインフレームframeに表示され、かつツリーが展開しているというような動作は可能でしょうか。 いろいろと高望みをしているとは思いますが、できればお力をお貸しください。 よろしくお願いします。

  • 【短い】1つだけ展開/表示/非表示/開閉【Javascript】

    このスクリプト、もっと短くなりませんか? idがdisp0,disp20などdisp+数字になっているものを開閉するスクリプト。 動作:対象を開き他を閉じる、対象が開いていた場合対象を閉じる。 条件:連番(0から順番)じゃなくても(0,1,2,7みたいに飛んでも)動作する。 <html> <head> <title>1つだけ展開/表示/非表示/開閉</title> <script> //idがdisp+数字のものを格納 var kakunou = new Array(); window.onload=function(){ var tags=document.getElementsByTagName("*"); for(var i=0;i<tags.length;i++){ if(tags[i].id.match(/^disp[0-9]+$/)){ mituketa=tags[i].id.match(/^disp[0-9]+$/); kakunou.push(mituketa); } } } //開閉処理部分 function disp(tage) { for(i=0;i<kakunou.length;i++){ cb = document.getElementById(kakunou[i]).style; if(kakunou[i]==tage){ if (cb.display == 'none') cb.display = "block"; else cb.display = "none"; } else { cb.display = 'none'; } } } </script> </head> <body> <a href="javaScript:disp('disp1')">+</a>■検索サイト1<br> <div id="disp1" style="display:none"> ├<a href="http://www.yahoo.co.jp/">Yahoo!</a><br> ├<a href="http://www.goo.ne.jp/" >Goo</a><br> └<a href="http://www.lycos.co.jp/">Lycos</a><br> </div> <a href="javaScript:disp('disp200')">+</a>■検索サイト2<br> <div id="disp200" style="display:none"> ├<a href="http://www.infoseek.co.jp/">Infoseek</a><br> ├<a href="http://www.google.com/" >Google</a><br> └<a href="http://kids.goo.ne.jp/">Kids Goo</a><br> </div> <a href="javaScript:disp('disp30')">+</a>■検索サイト3<br> <div id="disp30" style="display:none"> ├<a href="http://www.excite.co.jp/">Excite</a><br> └<a href="http://www.msn.com/" >MSN</a><br> </div> </body> </html>

  • ラジオボタンを他の物に変えても動作するようにしたい

    ラジオボタンでチェックされた項目に合わせて用意されている文章が表示されるものです。 そのラジオボタンを<button>や<img>に変えることは可能なのでしょうか。 <!--メニュー--> <div> <form method="get" name="updateHTML"> <input type="radio" name="imageSize" value="00" onclick="return toggle();" checked /> No.01<br /> <input type="radio" name="imageSize" value="01" onclick="return toggle();" /> No.02<br /> <input type="radio" name="imageSize" value="02" onclick="return toggle();" /> No.03<br /> </form> </div> <!--表示文--> <div id="html-00" style="display:inline;"> テキスト01 </div> <div id="html-01" style="display:none;"> テキスト02 </div> <div id="html-02" style="display:none;"> テキスト03 </div> <!--スクリプト--> <script type="text/javascript"> var options = new Array('00','01','02'); function toggle() { var form = document.forms['updateHTML']; var size = _getOption( form.imageSize ); var chosen = size; for ( var i = 0; i < options.length; i++ ) { var htmlId = 'html-'+ options[i]; var html = document.getElementById( htmlId ); if ( (html == null) ) { continue; } if ( options[i] == chosen ) { html.style.display = 'inline'; } else { html.style.display = 'none'; } } return true; } function _getOption(radioObj) { for ( counter = 0; counter < radioObj.length; counter++) { if ( radioObj[counter].checked ) val = radioObj[counter].value; } radioObj.value = val; return val; } </script>

  • div要素をランダムに表示させたい

    お世話になります。Javascriptについて質問させていただきます。 拙い説明で分かりにくいかと思いますが、ご教授いただけたらと思います。 javascriptとcssを使用して、ページをリロードする度に、divの要素をランダムに表示させるようにしたいと考えています。 ランダムで表示させるにはfunction test(no)関数のどこかにランダムで値を取得できるようにする必要があると思っているのですが、上手く設定ができずに悩んでいます。 ご回答頂けたら幸いです。 ■ html <body onLoad="test(no)"> <div id="link"> <div class="link01"> <p>文章1</p> </div> <div class="link02"> <p>文章2</p> </div> <div class="link03"> <p>文章3</p> </div> </div> <ul> <li><a href="#" onclick="showChanger(1);">リンク1</a></li> <li><a href="#" onclick="showChanger(2);">リンク2</a></li> <li><a href="#" onclick="showChanger(3);">リンク3</a></li> </ul> ■javascript function test(no){ var parenObj=document.getElementById("link"); for(var i in parenObj.childNodes){ var childObj=parenObj.childNodes[i]; if(childObj.tagName=="DIV"){ if(no == 1){ if(childObj.className=="link01"){ childObj.style.display = "block"; }else{ childObj.style.display = "none"; } } if(no == 2){ if(childObj.className=="link02"){ childObj.style.display = "block"; }else{ childObj.style.display = "none"; } } if(no == 3){ if(childObj.className=="link03"){ childObj.style.display = "block"; }else{ childObj.style.display = "none"; } } } } } ■css .link01 { display:block; margin-bottom:10px; } .link02 { display:none; margin-bottom:10px; } .link03 { display:none; margin-bottom:10px; }

  • テキストやリンクの表示・非表示

    Javascriptでテキストやリンクの表示や非表示をできるようにしたいです。 基本はテキストやリンクを非表示にして、”表示”リンクを表示させ、 ”表示”リンクをクリックすると、テキストと”非表示”リンクを表示させます。 しかし下のソースで実行をすると 最初、”表示”リンクのみ表示→”表示”リンクをクリック 次、テキストと”非表示”リンクを表示→”非表示”リンクをクリック 次、全て非表示 と、なってしまい、再度表示させることができなくなってしまいます。 よい解決方法があったら教えてください。 よろしくお願いします。 ========================================================== <html> <head> <title>表示・非表示テスト2</title> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <script language="javascript"> <!--// var typ; var typ2; function setDisplay(typ,typ2){ document.getElementById("myText").style.display = typ; document.getElementById("myText2").style.display = typ2; } //--> </script> </head> <body> <DIV ID="myText" style="display:none"> Display Sample<br> <a href="javascript:setDisplay('none','blcok');">非表示</a><br> </DIV> <br> <DIV ID="myText2"> <a href="javascript:setDisplay('block','none');">表示</a><br> </DIV> <br> </body> </html>

  • DOMを使ったテキストノードの繰り返し書き換え方法

    pタグにtestという文字を入れるようにしたいのですが、ブラウザがかたまってしまいます。 考え方としては間違っていないと思うのですが、なぜでしょうか。 <html lang="ja"> <head> <title></title> </head> <body> <div id="aaa"> <p></p> <p></p> <p></p> </div> <script> var pels = document.getElementById("aaa"); var pp = pels.childNodes; for(i=0; i=pp.length; i++){ //i%2==0で空白テキストノードを除く if(i%2 == 0){ pels.childNodes.item(i).nodeValue = "test"; } } </script> </body> </html>

  • lengthが読めない理由が分からない

    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をあんな読み方できない、とか。

専門家に質問してみよう