不知道如何解释,用过 DW 的人应该知道 Ctrl + T ,这个就是模拟那个的,不过没有自动提示就是了。
建议将这个宏也设置快捷键 Ctrl + T 。(具体设置请参见 Emeditor Macros Help)
输入(将~换成空格) | 输出 |
---|---|
table | <table>{原来选中的文字}</table> |
table~ | <table width="100%" border="0" cellpadding="0" cellspacing="0">{原来选中的文字}</table> |
table~,tbody,tr,td | <table width="100%" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td>{原来选中的文字}</td></tr></tbody></table> |
div#abc,p | <div id="abc"><p>{原来选中的文字}</p>>div> |
div#abc,p,a~,img~ | <div id="abc"><p><a href="#"><img src="" width="" height=""/>{原来选中的文字}</a></p>>div> |
规则:
- 将输入作为标签名,补齐开始和结束标所需
- 如果只是签名和空格,则将空格用一些默认属性填充,具体见 autoprop
- 遇到逗号(,),则将逗号分割的各词单独补齐成为标签,并将后面的标签添加为前面标签的子标签
- 之前选中的文字则作为最内层标签的内容,如果最内层是自闭合标签,则之前选中的内容跟随最内层标签后面
待完善功能:
- 是否使用其他符号替代空格来补齐默认属性
- 可以更好的交互编辑,类似 TextMate 的 tab 模式
- 增加同层节点,现在只能创建多层子节点
var tag,
autoprop={
a: 'href="#"',
div: 'class=""',
style: 'type="text/css"',
link: 'type="text/css" rel="stylesheet" href=""',
script: 'type="text/javascript" src=""',
input: 'type="" name="" value=""',
img: 'src="" width="" height=""',
table: 'width="100%" border="0" cellpadding="0" cellspacing="0"',
iframe: 'frameborder="0" scrolling="no" width="" height="" src=""'
},
sigletag={'br':1, 'link':1, 'hr':1, 'col':1, 'input':1, 'meta':1, 'img':1};
if(tag = prompt("请输入标签:", "div")){
if(tag.indexOf(',')==-1){
var t = buildTag(tag);
document.selection.Text = t[1] + document.selection.Text + t[2];
}else{
var tags = tag.split(/, */),
rstr = '',
rstr2 = '';
for(var i=0,iM=tags.length;i<iM;i++){
tag = buildTag(tags[i]);
rstr += tag[1];
rstr2 = tag[2] + rstr2;
}
document.selection.Text = rstr + document.selection.Text + rstr2;
}
}
/*
返回
[标签,起始标签,结束标签]
*/
function buildTag(t){
var tagname=t.split(/ +/)[0];
var autoa = (t == tagname + ' ') && (tagname in autoprop);
if(tagname.match(/[#\.]/)){
var id = tagname.match(/#([^\.]+)/),
cls = tagname.match(/\.[^\.]+/g);
t = tagname = tagname.match(/^([^#\.]+)/)[1];
if(id)t += ' id="' + id[1] + '"';
if(cls){
t += ' class="' + cls.join(' ').replace(/\./g, '').replace(/ +/g, ' ') + '"';
}
if(autoa)t += ' ';
}
if(autoa){
t += autoprop[tagname];
}
return [tagname,
"<" + t + (tagname in sigletag ? ' />' : '>'),
tagname in sigletag ? '' : ("</" + tagname + ">")];
}
No comments:
Post a Comment