TinyMCE:获取初始化内的原始textarea引用 问题

TinyMCE:获取初始化内的原始textarea引用 问题,tinymce,Tinymce,的宽度由CSS类定义,例如:wMax或wDefault。第一种情况是100%,第二种情况是200像素。默认情况下,TinyMCE将所有内容转换为固定宽度(以像素为单位)。当然,我可以在tinyMCE.init()内部设置宽度:100%,但这不会用wDefault/fixed with覆盖文本区域 我需要什么 我需要TinyMCE width的行为与原始版本相同,%px或px,具体取决于它的CSS类 如果我可以在tinyMCE.init()过程中找到对原始textarea元素的引用,那么我可以从中

的宽度由CSS类定义,例如:
wMax
wDefault
。第一种情况是100%,第二种情况是200像素。默认情况下,TinyMCE将所有内容转换为固定宽度(以像素为单位)。当然,我可以在
tinyMCE.init()
内部设置
宽度:100%
,但这不会用wDefault/fixed with覆盖文本区域

我需要什么 我需要TinyMCE width的行为与原始版本相同,%px或px,具体取决于它的CSS类

如果我可以在
tinyMCE.init()
过程中找到对原始textarea元素的引用,那么我可以从中读取CSS类,并设置
width:(textarea.hasClass('wMax')?'100%':null)
或类似的设置

我知道这个函数,它可以让我准确地看到文本区域。但是我从哪里来运行它呢?tinyMCE.activeEditor在
init()
中为null


我目前仍在使用TinyMCE 3,但如果您也能为4.x版本回答这个问题,那就太好了,当然,如果有任何不同的话…

我不知道这是否会引导您进入正确的方向。我使用此代码调整iframe高度以适合输入的内容。您可以稍微调整它,以根据需要调整其高度和宽度(您需要通过
$('#'+ed.id)
onInit获取textarea)。 下面是函数。基本上,它会显式地更改编辑器iframe的样式属性

    resizeIframe: function(frameid) {
        var frameid = frameid ? frameid : this.editor.id+'_ifr';
        var currentfr=document.getElementById(frameid);

        if (currentfr && !window.opera){
            currentfr.style.display="block";
            if (currentfr.contentDocument && currentfr.contentDocument.body.offsetHeight) { //ns6 syntax
                currentfr.height = currentfr.contentDocument.body.offsetHeight + 26;
            }
            else if (currentfr.Document && currentfr.Document.body.scrollHeight) { //ie5+ syntax
                    currentfr.height = currentfr.Document.body.scrollHeight;
            }
            styles = currentfr.getAttribute('style').split(';');
            for (var i=0; i<styles.length; i++) {
                if ( styles[i].search('height:') ==1 ){
                    styles.splice(i,1);
                    break;
                }
            };
            currentfr.setAttribute('style', styles.join(';'));
        }
    },
resizeIframe:function(frameid){
var frameid=frameid?frameid:this.editor.id+“如果”;
var currentfr=document.getElementById(frameid);
if(currentfr&!window.opera){
currentfr.style.display=“块”;
if(currentfr.contentDocument&¤tfr.contentDocument.body.offsetHeight){//ns6语法
currentfr.height=currentfr.contentDocument.body.offsetHeight+26;
}
else if(currentfr.Document&¤tfr.Document.body.scrollHeight){//ie5+语法
currentfr.height=currentfr.Document.body.scrollHeight;
}
styles=currentfr.getAttribute('style').split(';');

对于(var i=0;i我自己找到了解决方案。共享

在标题中回答我自己的问题:不可能在init()中引用textarea过程直接运行,因为它不针对每个tinyMCE实例运行。它只运行一次。:tinyMCE有一个可自定义的设置功能,它确实针对每个实例运行,并具有解决上述问题所需的所有引用

使用以下代码:

tinyMCE.init({
    // ... your settings here ...
    setup: function(ed){
        if(ed.getElement().hasClass('wMax')){
            ed.settings.width = '100%';
        }
    }
});
任何CSS类为“wMax”(替换为您自己的)的textarea都将被宽度为100%的TinyMCE实例替换。所有其他文本区域都将具有固定宽度,等于初始化时textarea的宽度。您可以使用任何宽度扩展此方法,如wHalf width:50%等


注意:
.hasClass()
函数是Mootools JS库的一部分。如果您使用不同的库,请替换为另一个库。

Thariama,感谢您共享您的代码。但是我认为我不会实施此解决方案,因为它的大小、浏览器依赖性和方法。说到解决方案,更稳定的解决方案是将编辑器封装在对DIV进行反求并对其应用CSS。您不能将tinymce编辑器包装到另一个元素中,因为Tinyme使用自己的iframe(使用自己的CSS)我一直在包装它,在div、表单元格等中。只要设置tinyMCE width:100%,它就可以适合任何块级元素。你包装哪个元素?你在初始化之前包装它吗?是的,我的意思是在初始化之前简单地包装textarea。
。通过这样做,你可以将tinyMCE width设置为100%,并将包装设置为任何宽度b动态的或固定的。但这也是一个不必要的解决方法。使用我找到的真正的“解决方案”,您不需要额外的CSS规则、额外的HTML、任何JavaScript事件或其他依赖于浏览器的JS。