人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

javascriptで、どう実装すればいけそうかについて質問させて下さい。
下記、HTMLのタグでdivタグの入れ子になっているタグを消したいです。

例)
...<div><span>ああああ</span><span>いいいい</span></div>...

...<div>ああああいいいい</div>...

※実際は、<span>タグがいくつあるか分からない(1コかもしれないし、5コかもしれない)し
</div>タグの前後にもHTMLが続いています。それでもうまくいく書き方がほしいです。
また、前後に続いていくHTMLでもdivタグ内の入れ子のタグは削除したい。

正規表現で置換できるかなと考えましたが
残念ながら、うまく書けずギブでした。。。。
※実現方法は、正規表現でなくても構いません。

PGMを実際に書いていただけると嬉しいですが、こうするといけるんじゃない?という
提案でも全然ありがたいです。

お手数おかけしますが、宜しくお願い致します。

●質問者: misaex
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●500ポイント ベストアンサー

DOM には、textContent という属性があるので、それが使えると思います。

 // 全ての DIV を取得
 var list = document.querySelectorAll("div");

 // 全ての DIV に対して実行
 Array.prototype.forEach.call(list, function(div) {
 // DIV の中にあるテキストで、HTML を置き換える(これだけ :-)
 div.innerHTML = div.textContent;
 });


jsFiddle で試したのがこちら。「edit」ボタンを押すと、HTML を書き換えます。
https://jsfiddle.net/gc0t7bo7/


もっとベタに書くと、こんな感じになります。

 function getText(node) {
 var e = node.firstChild;
 var txt = "";
 do {
 if (e.nodeType == 3) {
 txt += e.nodeValue;
 } else if (e.nodeType == 1) {
 txt += getText(e);
 }
 } while (e = e.nextSibling); // == じゃないけど、間違いじゃない

 return txt;
 }

 // 全ての DIV を取得
 var list = document.querySelectorAll("div");

 // 全ての DIV に対して実行
 Array.prototype.forEach.call(list, function(div) {
 // DIV の中にあるテキストで、HTML を置き換える
 div.innerHTML = getText(div);
 });

misaexさんのコメント
ありがとうございます! 最高です!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ