見出し画像

FirefoxとChromeの編集可能なDivの違い

前回、一行目からタイトルを取り出す処理を実装してみたものの、Firefoxではうまく動いても、Chromeだとなぜかうまくいかない事態に直面しました。これがブラウザツールの面倒なところです。

ちなみに、textLineのカードは、<textarea>ではなく、編集可能な<div>を使っています。contenteditable属性を指定したdIvですね。

<div contenteditable=true>
   このDivの中身は編集できるよ。
</div>

jQueryならattrから指定もできます。

$('#hogehoge').attr('contenteditable',true)

で、このdivの中身がどうなっているのかを確認してみました。

まずはFirefox。Macならoption+commant+cで「インスペクター」が起動するので、それで中身をチェック。

<br>で改行されていますね。では、Chromeではというと、

オーマイガッ!貴様ら、divの中身が違うじゃないか。そりゃうまくいかないはずです。

前に書いたコードでは、<br>を改行の印として使っていましたが、chromeも視野に入れると、それだけでは足りません。他のブラウザのこともあるでしょうが、とりあえずは<div>も印に加えることでChrome対策にはなりそうです。

function getTitle(html){
   var t  = html.split(/<br>|<div>/);

   if (t.length > 1){
       title = t[0].replace(/<("[^"]*"|'[^']*'|[^'">])*>/g,'')
	t.shift(); 
   }else{
	title = ""
   }
	
   body = t.join("<br>");
   return {"title":title,"body":body};
}

この場合、改行以外の目的で追加されたdivがあるとややこしくなりそうですが、現状の入力状態だとそこまで心配する必要はなさそうですね。

で、後半<br>で配列を結合したものは、Chromeでも意図通りに表示されます。まあ、<br>を入れているのですから当然ではあるでしょう。

これでとりあえず二つのモダンなブラウザには対応できました。safariはまあ、後から考えることにしましょう。


この記事が気に入ったらサポートをしてみませんか?