Javascript 结束时隐藏非从属按钮<;预处理>;标签

Javascript 结束时隐藏非从属按钮<;预处理>;标签,javascript,tinymce,Javascript,Tinymce,我是TinyMCE的新手,但我成功地制作了一个按钮,它只是一个带有一些代码的标签 (function() { tinymce.PluginManager.requireLangPack('pre'); tinymce.create('tinymce.plugins.PrePlugin', { init : function(ed, url) { var t = this; t.ed

我是TinyMCE的新手,但我成功地制作了一个按钮,它只是一个带有一些代码的
标签

(function() {
    tinymce.PluginManager.requireLangPack('pre');

    tinymce.create('tinymce.plugins.PrePlugin', {       
        init : function(ed, url) {          
            var t = this;
            t.editor = ed;

            ed.addCommand('mcePre', function() {
                ed.windowManager.open({
                    file : url + '/dialog.htm',
                    width : 500 + parseInt(ed.getLang('pre.delta_width', 0)),
                    height : 300 + parseInt(ed.getLang('pre.delta_height', 0)),
                    inline : 1
                }, {
                    plugin_url : url
                });
            });

            ed.addButton('pre', {
                title : 'pre.desc',
                cmd : 'mcePre',
                image : url + '/img/pre.gif'
            });

            ed.onNodeChange.add(function(ed, cm, n) {
                cm.setActive('pre', n.nodeName == 'CODE');

                if(n.nodeName == 'CODE') t._setDisabled(1);
                else t._setDisabled(0);

                var notEmptyNode = n.innerHTML.replace(new RegExp('<\/?[^>]+>', 'gi'), '').replace(new RegExp('&nbsp;', 'gi'), '').match(/.*?[\S].*?/);
                if(notEmptyNode && n.nodeName != 'CODE')
                cm.setDisabled('pre', true);

            });
        },

        createControl : function(n, cm) {
            return null;
        },

        getInfo : function() {
            return {
                longname : 'Pre plugin',
                author : 'Marchenko Alexandr',
                authorurl : 'http://webdiz.com.ua',
                infourl : 'http://webdiz.com.ua',
                version : "1.0"
            };
        },


        _block : function(ed, e) {
            var k = e.keyCode;

            // Don't block arrow keys, pg up/down, and F1-F12
            if (k == 46 || (k > 32 && k < 41) || (k > 111 && k < 124))
                return;

            if (e.preventDefault) {
                e.preventDefault();
                e.stopPropagation();
            }
            else {
                e.returnValue = false;
                e.cancelBubble = true;
            }
            return false;
        },

        _setDisabled : function(s) {
            var t = this, ed = t.editor;

            tinymce.each(ed.controlManager.controls, function(c) {
                if(c.settings.cmd != 'mcePre') {
                    c.setDisabled(s);
                }
            });

            if (s !== t.disabled) {
                if (s) {
                    ed.onKeyDown.addToTop(t._block);
                    ed.onKeyPress.addToTop(t._block);
                    ed.onKeyUp.addToTop(t._block);
                    ed.onPaste.addToTop(t._block);
                } else {
                    ed.onKeyDown.remove(t._block);
                    ed.onKeyPress.remove(t._block);
                    ed.onKeyUp.remove(t._block);
                    ed.onPaste.remove(t._block);
                }

                t.disabled = s;
            }
        }
    });

    // Register plugin
    tinymce.PluginManager.add('pre', tinymce.plugins.PrePlugin);
})();
在那里,用户只能编写源代码,但是如果他们使用像
bold
这样的按钮,那么它就会变为粗体

我一直在试图找到一种方法来禁用它,并且发现当你在一个特殊的标签上时可以禁用按钮

所以我想知道,如果有人知道这是怎么可能的

我有这个插件,下面是哪个例子: 如果你看这段视频,你会明白我的意思,他会在
0:40
之后查看
标签

ed.onNodeChange.add(function(ed, cm, n) {
    cm.setActive('pre', n.nodeName == 'PRE');

    if(n.nodeName == 'PRE') t._setDisabled(1);
    else t._setDisabled(0);

    var notEmptyNode = n.innerHTML.replace(new RegExp('<\/?[^>]+>', 'gi'), '').replace(new RegExp('&nbsp;', 'gi'), '').match(/.*?[\S].*?/);
    if(notEmptyNode && n.nodeName != 'PRE')
    cm.setDisabled('pre', true);

});
您可以在此处看到插件文件的来源:

(函数(){
tinymce.PluginManager.requireLangPack('pre');
create('tinymce.plugins.PrePlugin',{
init:函数(ed,url){
var t=这个;
t、 编辑=编辑;
ed.addCommand('mcePre',function(){
ed.windowManager.open({
文件:url+'/dialog.htm',
宽度:500+parseInt(ed.getLang('pre.delta_width',0)),
高度:300+parseInt(ed.getLang('pre.delta_height',0)),
内联:1
}, {
插件url:url
});
});
ed.addButton('pre'{
标题:“pre.desc”,
cmd:'mcePre',
图片:url+'/img/pre.gif'
});
ed.onNodeChange.add(函数(ed,cm,n){
cm.setActive('pre',n.nodeName=='CODE');
如果(n.nodeName=='CODE')t.(设置已禁用(1);
否则t._设置被禁用(0);
var notEmptyNode=n.innerHTML.replace(新正则表达式(']+>,'gi'),'').replace(新正则表达式(''gi'),'').match(/.?[\S].*?/);
if(notEmptyNode&&n.nodeName!=“CODE”)
cm.setDisabled('pre',true);
});
},
createControl:函数(n,cm){
返回null;
},
getInfo:function(){
返回{
longname:'预插件',
作者:“Marchenko Alexandr”,
作者URL:'http://webdiz.com.ua',
infourl:'http://webdiz.com.ua',
版本:“1.0”
};
},
_块:功能(ed,e){
var k=e.keyCode;
//不要阻止箭头键、pg up/down和F1-F12
如果(k==46 | | |(k>32&&k<41)| |(k>111&&k<124))
返回;
如果(如默认){
e、 预防默认值();
e、 停止传播();
}
否则{
e、 returnValue=false;
e、 取消气泡=真;
}
返回false;
},
_setDisabled:功能已禁用{
var t=this,ed=t.editor;
tinymce.each(ed.controlManager.controls,function(c){
如果(c.settings.cmd!=“mcePre”){
c、 设置为禁用(s);
}
});
如果(s!==t.禁用){
若有(s){
ed.onKeyDown.addToTop(t.\U块);
ed.onKeyPress.addToTop(t.\U块);
ed.onKeyUp.addToTop(t.\U块);
ed.onPaste.addToTop(t.\U块);
}否则{
ed.onKeyDown.移除(t._块);
拆下(t._块);
拆除(t.U块);
ed.onPaste.remove(t.\U块);
}
t、 禁用=s;
}
}
});
//注册插件
add('pre',tinymce.plugins.PrePlugin);
})();
我发现了

这是执行以下操作的代码:

ed.onNodeChange.add(函数(ed,cm,n){
cm.setActive('pre',n.nodeName=='pre');
如果(n.nodeName==“PRE”)t.(设置已禁用(1);
否则t._设置被禁用(0);
var notEmptyNode=n.innerHTML.replace(新正则表达式(']+>,'gi'),'').replace(新正则表达式(''gi'),'').match(/.?[\S].*?/);
if(notEmptyNode&&n.nodeName!=“PRE”)
cm.setDisabled('pre',true);
});
PRE
更改为应该为其设置的任何标记,但它会禁用所有按钮,只有活动按钮保持不变,但也不能写入任何文本