ディオデウスがすでに述べたように、単一の文字を折りたたむことはできず、それを取り除きたい場合はそれを取り除く必要があります. 多くのブラウザは、連続して入力された複数のスペースを 1 つのスペースに「圧縮」します。これは、ユーザーが 15 個のスペースを入力した場合でも、表示されるスペースは 1 つだけであることを意味します。これが、tinymce が保護された空間に入る理由です。これで、入力されたすべてのスペースが別の種類のスペースの価格で表示されます。
更新: スパンを挿入してその位置を確認するサンプル コード。「左」に合計される値は、あなたにとって興味深いでしょう
var ed = this.editor, box = null;
if ( $(ed.getBody()).find('p:first').css('line-height') != 'normal'){
lineHeight = $(ed.getBody()).find('p:first').css('line-height') ;
}
else {
lineHeight = $(ed.getBody()).find('p:first').css('min-height');
}
var lineHeight = lineHeight.substr(0, lineHeight.length -2 );//box.height;
var rng = ed.selection.getRng();
rng.collapse(true);
bm = ed.selection.getBookmark();
$marker = $(ed.getBody()).find('#'+bm.id);
var elem = ed.getDoc().getElementById(bm.id+'_start');
box = elem.getBoundingClientRect();
var doc = ed.getDoc(),
docElem = doc.documentElement,
body = ed.getBody(),
win = ed.getWin(),
clientTop = docElem.clientTop || body.clientTop || 0,
clientLeft = docElem.clientLeft || body.clientLeft || 0,
scrollTop = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop,
scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
top = box.top + scrollTop - clientTop,
left = box.left + scrollLeft - clientLeft;
// set Bookmark
ed.selection.moveToBookmark(bm);