/** * 锚点插件,为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); } } } } } }; });