TinyMCE:在初始化中获取原始textarea引用

时间:2013-07-31 16:52:50

标签: tinymce

问题

<textarea>的宽度由CSS类定义,例如:wMaxwDefault。在第一种情况下,它是100%,在第二种情况下,可以说200px。默认情况下,TinyMCE将所有内容转换为固定宽度,以像素为单当然,我可以在width:100%内设置tinyMCE.init(),但这不会涵盖带有wDefault / fixed的textarea。

我需要什么

我需要TinyMCE宽度与原始,%或px的行为相同,具体取决于它的CSS类。

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

我知道getElement()函数,它正是我的textarea。但是我从哪里开始运行呢? tiny init()中的tinyMCE.activeEditor null

我目前仍在使用TinyMCE 3,但如果你能为4.x版本回答这个问题会很好,如果有任何不同的话......

2 个答案:

答案 0 :(得分:2)

自己找到解决方案。共享。

在标题中回答我自己的问题:直接在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库的一部分。如果您使用其他库,请替换为另一个。

答案 1 :(得分:0)

我不知道这是否会引导你走向正确的方向。我使用此代码调整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(';'));
        }
    },