Javascript 在TinyMCE4/Wordpress中自动插入更多标记

Javascript 在TinyMCE4/Wordpress中自动插入更多标记,javascript,wordpress,tinymce,tinymce-4,Javascript,Wordpress,Tinymce,Tinymce 4,我正在创建一个Wordpress主题,包括一个允许“自动插入更多标签”的TinyMCE版本。我指的是一个特殊的函数,它在Wordpress编辑器中指定的字符数(例如400)后插入一个“ReadMore”标记。原因是,Wordpress博客主页上列出的每一篇文章都显示在一个二次摘要图像旁边,没有经验的作者需要一种简单的方法使他们的摘要文本占据与图像大致相同的高度 我通过创建一个简单的TinyMCE插件部分实现了这一功能,该插件非常容易出错,而且可能是一个不合法的解决方案。您可以查看完整的代码 该插

我正在创建一个Wordpress主题,包括一个允许“自动插入更多标签”的TinyMCE版本。我指的是一个特殊的函数,它在Wordpress编辑器中指定的字符数(例如400)后插入一个“ReadMore”标记。原因是,Wordpress博客主页上列出的每一篇文章都显示在一个二次摘要图像旁边,没有经验的作者需要一种简单的方法使他们的摘要文本占据与图像大致相同的高度

我通过创建一个简单的TinyMCE插件部分实现了这一功能,该插件非常容易出错,而且可能是一个不合法的解决方案。您可以查看完整的代码

该插件的工作原理是获取编辑器的HTML内容,在第400个字符(在本例中)上分割HTML,随后从第一部分删除任何HTML标记,并计算两个开头部分的长度差:

function insertMore(ed, offset) {

    var content = ed.getContent();
    var contentStripped = ed.getContent({format:'text'});
    if (content.length > offset) {

        content = content.replace(/<!--more-->/g,'');

        var firstHalfUnstripped = content.slice(0, offset);
        var firstHalfStripped = firstHalfUnstripped.replace(/<(?:.|\n)*?>/gm, '');

        var diff = firstHalfUnstripped.length - firstHalfStripped.length;

        offset = offset + diff;

        var beg = null;
        var realOffset = offset;
        while(beg !== " ") {
            beg = content.slice(realOffset, realOffset+1);
            realOffset++;
            if(beg === "") {
                break;
            }
        }

        content = [content.slice(0, realOffset), '<!--more-->',
        content.slice(realOffset)].join('');

        ed.setContent(content);

    }

}
刚刚返回
IndexSizeError:未能对“范围”执行“setStart”:偏移量400处没有子项。

当我尝试手动设置范围时,也发生了同样的事情

忽略TinyMCE并尝试按说明在textarea中设置光标位置根本没有效果

我怎样才能使它正常工作?提前谢谢

<a href="image.png"><img class="alignright wp-image-543 size-full" src="image.png" alt="Image" width="250" height="250" /></a>

--> <a href="image.png"><img class="alignright wp-image-543 size-full" 
    <!--more-->
    src="image.png" alt="Image" width="250" height="250" /></a>
tinyMCE.get(0).selection.setCursorLocation(tinyMCE.get(0).getBody(), 400)