アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。

jqueryを使って無駄なspanタグを削除したいのですが、可能でしょうか?

例えば以下のhtmlがあった場合、
------------------------------------------
<span class="a">あいうえお</span>
<span>かきくけこ</span>
<span class="b">さしすせそ</span>
<span>たちつてと</span>
------------------------------------------

jqueryを使うことで、
------------------------------------------
<span class="a">あいうえお</span>
かきくけこ
<span class="b">さしすせそ</span>
たちつてと
------------------------------------------

このように無駄なspanタグを削除したいのですが、可能でしょうか?
ご存知の方、ご回答いただければ幸いです。
よろしくお願い致します。

A 回答 (4件)

質問文を素直に実行するのなら。




$("span:not([class])").each( function(i){
var childNodes = this.childNodes;
$(this).replaceWith(childNodes);
});


検証データ

動作前
<div>
<p>
<span class="a">あいうえお</span>
<span>かきくけこ</span>
<span class="b">さし<span>す</span>せそ</span>
<span>たち<span>つ</span>てと</span>
なに<span>ぬ</span>ねの
</p>
</div>


動作後
<div>
<p>
<span class="a">あいうえお</span>
かきくけこ
<span class="b">さしすせそ</span>
たちつてと
なにぬねの
</p>
</div>


改行コードは半角スペースとして表示されます。(HTMLの文法に準拠。)
.children()にtextNodeが入っておらず、意外と苦労しました。
    • good
    • 1
この回答へのお礼

ご回答いただきありがとうございます。

素晴らしいです!
当方の求めていた回答ズバリでした。

この度はご回答いただき本当にありがとうございました。

お礼日時:2014/07/26 14:58

検証環境がないのでちょっと適当になってしまいますが……。


 
// 対象の指定
var d_span_target = $('span.a') ;
//削除前テキストの取得
var d_span_txt = d_span_target.next().text();
//書き換え
d_span_target.next().html(d_span_txt);

とかでどうでしょう?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

実際のソースは削除前テキストが対象の次にあるとは限らないため、
当方の想定しているものとは少し異なっていました。

ただ、jqueryでの解決策を教えていただき、感謝しております。
ありがとうございます。

お礼日時:2014/07/26 14:50

なぜjqueryなのでしょう。


単純にスタイルシートで
span[class]{display:inline;}
span{display:none;}
と属性セレクタで上書きすればよいだけかと・・・
詳細度が11と1だと11のほうが大きいので・・
 HTML/CSSをきちんと身につけましょう。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

質問にもお書きしましたが、jqueryを使っての解決策を求めています。
さらに、残念ながらその方法では、

かきくけこ
たちつてと

の文字まで消えてしまいますね、、、;

お礼日時:2014/07/26 14:55

何を持ってして無駄というのでしょうか?



上記の理由いかんかもしれませんが、そのspanを消す処理自体が無駄な気がします。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>>何を持ってして無駄というのでしょうか?
何一つスタイルを指定していない文をわざわざ<span>で囲っている点です。
確かに消さなくても問題ありませんが、無意味なタグは極力消したいためです。

お礼日時:2014/07/26 14:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!