2012-02-14 15 views
1

contenteditable divでフォーマットされたHTMLがあります。私はより簡潔で現代的なHTMLにしたいと思っています。私は簡単にb、strong、em、fontなどのタグを置き換えてスパンで置き換えることができますが、その結果、スタックされた要素が生成されました。例えばjquery - 積み重ねられたDOM要素を統合する

、私が持っているかもしれません:

<span style="font-weight:bold"> 
    <span style="text-decoration:underline">some text</span> 
</span> 

を私は見てみたい:

<span style="font-weight:bold; text-decoration:underline">some text</span> 

難しい部分が処理する必要があります:

<span style="font-weight:bold"> 
    <span style="text-decoration:underline">some text</span> not underlined 
</span> 

私は」これについて何か探して考えていたのですが、合理的なものは見つかりませんでした。

+0

あなたはこれをJavaScriptで実行したいと思っていますか? –

+0

@JamesMontagneはい。ユーザーは "contenteditable = true" divにテキストを入力し、送信する前にそれをクリーンアップしたいと思います。私はdivのHTMLをきれいに保つために探していない、ちょうどそれが私がすでにキャプチャしているイベントであるユーザーが完了したら、それを行う必要があります。 – jopke

+0

@jopke - 私は、contenteditable divが送信ボタンでクリーンアップされるという同様の要件がありました。簡単にするために、useCSSをfalseに設定し、htmlスープをクリーンアップします(http://stackoverflow.com/questions/16226671/consolidate-stacked-dom-formatting-elements-contenteditable-divで解決策3を見てください)。 regexを使ってb/span/s/u/i/emタグを適切なCSS equivに素早く変換します。 Solution3はすべてのノードの書式設定を命じるので、正規表現を使ってどのように処理したいかをフォーマットすることができます。 –

答えて

0

さて、これが始まりです。明らかに、セレクタはspanよりも具体的になります。

$("span").each(function(){ 
    var $this = $(this); 
    var $contents = $(this).contents(); 

    if($contents.length === 1 && $contents.is("span")){ 
     // only one child (including text nodes) and it is a span, combine 
     copyStylesFromParentToChild(); // need to implement this 

     $this.replaceWith($this.children()); // replace the parent with the child 
    } 
}); 

ここで厄介な部分はcopyStylesFromParentToChildです。 1つの要素から別の要素にすべてのスタイルをコピーする簡単な方法はわかりません。試してみることができますJavaScript & copy style

+0

これは合理的なアプローチのようです。私はすぐにそれを与えるだろう... – jopke

関連する問題