私はあなたのテキスト選択のアイデアから逸脱し、マウスオーバーとハイライトベースのソリューションを実行しました。正確な要件ではありませんが、基本的な目標を達成します。改善の余地がたくさんあります。
例:jsFiddle
JS
var $txtArea = $('textarea');
function Rebind(){
$('#editable *').off('mouseover.editor').on('mouseover.editor',function() {
$(this).addClass('highlight');
return false;
}).off('mouseout.editor').on('mouseout.editor',function() {
$(this).removeClass('highlight');
return false;
}).off('click.editor').on('click.editor',function() {
var $sel = $('.highlight');
$txtArea.val($sel.html()).data('selected', $sel);
});
}
Rebind();
$('input').click(function(){
$txtArea.data('selected').html($txtArea.val());
Rebind();
});
注:何らかの理由でjQueryon
が新しい要素を取得していなかったため、編集後にそれらを再バインドする必要がありました。
HTML
<div id='editable'>
<div>
This is <br /> some <b>content</b>
<div>testing</div>
<div>
some <i>more content</i>
<div>eidt me</div>
</div>
</div>
</div>
<textarea ></textarea>
<input type="button" value="save" />
CSS
textarea{
height:150px;
width:100%;
}
.highlight
{
border:1px solid blue !important;
}