在<p>标记</p>中的行的开头折叠

时间:2012-05-24 21:12:56

标签: javascript html css tinymce

我正在使用TinyMCE来允许我的用户创建自己的网页。我的目标是让人们在编辑器中输入的内容与它发布的页面完全一样。我几乎得到了它,但是如果用户在句子之间放置两个空格,则Tinymce会添加&nbsp;。显然,在编辑器中,它会折叠&nbsp;,如果它位于一行的开头,那么每一行都是在编辑器的左侧。但是,在完成的页面中,这会产生“p”标记中行开头有空格的情况。我可以删除&nbsp;,但它在编辑器中的外观与最终页面不同。

是否有人知道如何在&nbsp;标记的行的开头折叠P?或者有没有办法在TinyMCE中以不同的方式格式化,以便编辑器和最终页面看起来完全相同?谢谢!

2 个答案:

答案 0 :(得分:1)

没有办法“崩溃”它。您必须使用REGEX或字符串替换删除它。

答案 1 :(得分:1)

正如Diodeus所说,你不能折叠一个角色,如果你想要摆脱它,你将不得不将其剥离。 许多浏览器会将一行中多个输入的空间“压缩”到一个单独的空间。这意味着即使用户输入了15个空格,也只有一个可见空间。这就是为什么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);