• ベストアンサー

javascriptで、<body>タグ内のnodeNameが"#te

javascriptで、<body>タグ内のnodeNameが"#text"のみを拾って書き直したいのですがわかりません。 特定のタグの中だけならいろいろとサンプルがあるのですが、いくつタグがあるのかわからない時に全ての"#text"を調べるには再帰呼び出しなどを用いることになるかとも思いますが。 http://q.hatena.ne.jp/1203511355 に目的にかなうようなスクリプトが掲載されていましたが、あるファイルの中を調べるスクリプトのようで動作しません。 どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

tagを全部取得して、ひとつひとつノードをチェックするとか <head> <script> window.onload=function(){ var tags=document.getElementsByTagName("body")[0].getElementsByTagName("*"); for(var i=0;i<tags.length;i++){ var n=tags[i].firstChild; while(n){ if(n.nodeName=="#text") alert(n.nodeValue); n=n.nextSibling; } } } </script> </head> <body> <div>1<div>2</div><div>3<div>4</div></div></div> </body>

rqg2010
質問者

お礼

yambejpさん、お早うございます。 再帰呼び出しにこだわってこのような簡潔な方法があることに気がつきませんでした。 どうもありがとうございました。

その他の回答 (4)

  • think49
  • ベストアンサー率59% (285/482)
回答No.5

#4 です。 サンプルを書いてみました。 gist: 653491 - (ExtXPathEvaluator.js) - GitHub http://gist.github.com/653491

rqg2010
質問者

お礼

think49さん、お早うございます。 引き続き投稿していただきありがとうございます。 #4で紹介して頂いた箇所を訂正した方もどうも思うように動きませんでした。 そのときに新たに投稿を頂きありがとうございます。 早速試してみました。 使い方のサイトも見て試したのですが、どうも思うように動きません。 私のスキル不足と改めて学習しなければと思う次第です。 もう少し調べてみます。 どうもありがとうございました。

  • think49
  • ベストアンサー率59% (285/482)
回答No.4

関数を定義して再帰呼び出しか、XPath でテキストノードを抽出するか…。 --- var doc, textResult; doc = document; textResult = doc.evaluate('descendant::text()[normalize-space(.)]', doc.body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); --- Interface XPathEvaluator - DOM L3 XPath http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator document.evaluate - MDC https://developer.mozilla.org/en/DOM/document.evaluate JavaScript-XPath – CodeRepos::Share – Trac http://coderepos.org/share/wiki/JavaScript-XPath 掲示板/JavaScript質問板/ユニコードと正規表現 - TAG index Webサイト http://www.tagindex.com/cgi-lib/q4bbs/patio.cgi?mode=view&no=2618

rqg2010
質問者

お礼

think49さん、お早うございます。 XPath、とても便利そうで興味を持ちました。 すぐには、マスターできそうにありません。 是非本格的に調べてみたく思いました。 置き換えを考えている方が多くいるということかと思いました。 良いサイトを紹介していただきありがとうございました。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

いろいろな方法が既に出ているので、参考まで。 もし、参考にあげられているサイトのコードを使いたいのであれば、  lst[i].text となっているところを  lst[i].nodeValue にすれば、ちゃんとテキストを拾ってくれます。 (ブラウザによっては、空の#textも拾ってきちゃうけど) 引数のrootに bodyなどをセットしてあげればよろしいかと。 window.onload = function() { iter(document.getElementsByTagName("body")[0]); alert(stack.join("\n")); } >書き直したいのですがわかりません 内容を書き直すのであれば、テキストの内容をスタックするのではなく、要素そのものをスタックしておいたほうが、後の処理に都合がよさそう…

rqg2010
質問者

お礼

fujillinさん、お早うございます。 ご指摘された箇所を書き直して実行してみましたが、動きません。 改めて自信のスキル不足を感じます。 もう少し調べてみます。 貴重なご指摘をどうもありがとうございました

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

単に alert(document.documentElement.textContent); で出来ます。 あ、<body></body>の中に、 <script></script>とかがあると、その中身まででちゃうけど... ※古いIEは見捨てましょう!

rqg2010
質問者

補足

yyr446さん、お早うございます。 alert(document.documentElement.textContent); を実行するとJavascriptの中身ばかり表示されてしまいまして 目的の用途に使うにはもう少し調べないとできそうにありませんでした。 でも、こんな方法もあるのですね。 とても参考になりました。 ありがとうございました。

関連するQ&A