/** * 锚点插件,为UEditor提供插入锚点支持 * @file * @since 1.2.6.1 */ UE.plugin.register('anchor', function (){ return { bindEvents:{ 'ready':function(){ utils.cssRule('anchor', '.anchorclass{background: url(\'' + this.options.themePath + this.options.theme +'/images/anchor.gif\') no-repeat scroll left center transparent;cursor: auto;display: inline-block;height: 16px;width: 15px;}', this.document); } }, outputRule: function(root){ utils.each(root.getNodesByTagName('img'),function(a){ var val; if(val = a.getAttr('anchorname')){ a.tagName = 'a'; a.setAttr({ anchorname : '', name : val, 'class' : '' }) } }) }, inputRule:function(root){ utils.each(root.getNodesByTagName('a'),function(a){ var val; if((val = a.getAttr('name')) && !a.getAttr('href')){ //过滤掉word冗余标签 //_Toc\d+有可能勿命中 if(/^\_Toc\d+$/.test(val)){ a.parentNode.removeChild(a); return; } a.tagName = 'img'; a.setAttr({ anchorname :a.getAttr('name'), 'class' : 'anchorclass' }); a.setAttr('name') } }) }, commands:{ /** * 插入锚点 * @command anchor * @method execCommand * @param { String } cmd 命令字符串 * @param { String } name 锚点名称字符串 * @example * ```javascript * //editor 是编辑器实例 * editor.execCommand('anchor', 'anchor1'); * ``` */ 'anchor':{ execCommand:function (cmd, name) { var range = this.selection.getRange(),img = range.getClosedNode(); if (img && img.getAttribute('anchorname')) { if (name) { img.setAttribute('anchorname', name); } else { range.setStartBefore(img).setCursor(); domUtils.remove(img); } } else { if (name) { //只在选区的开始插入 var anchor = this.document.createElement('img'); range.collapse(true); domUtils.setAttributes(anchor,{ 'anchorname':name, 'class':'anchorclass' }); range.insertNode(anchor).setStartAfter(anchor).setCursor(false,true); } } } } } } });