Bil*_*oon 7 javascript regex coffeescript emmet
我分享了优秀的zen编码项目,想要使用^来实现DOM提升 - 所以你可以这样做:
html>head>title^body>h1 而不是 html>(head>title)+body>h1
最初我用相当粗制的正则表达式方法实现.我现在已经使用@ Jordan的优秀答案实现了.我的叉子在这里
有没有我的函数返回错误值的情况?
免责声明:我从未使用过 zen-coding,这只是我第二次听说它,所以我不知道可能的陷阱是什么。也就是说,这似乎是一种可行的解决方案,或者至少非常接近于一种可行的解决方案。
我为此使用Zen Coding for textarea v0.7.1 。如果您使用不同版本的代码库,您将需要相应地调整这些说明。
一些评论者认为这不是正则表达式的工作,我同意。幸运的是,zen-coding 有自己的解析器实现,并且非常容易构建!您需要在两个地方添加代码才能使其工作:
将^字符添加到函数special_chars中的变量中isAllowedChar(大约从第 1694 行开始):
function isAllowedChar(ch) {
...
special_chars = '#.>+*:$-_!@[]()|^'; // Added ascension operator "^"
Run Code Online (Sandbox Code Playgroud)switch在函数语句中处理 new 运算符parse(大约从第 1541 行开始):
parse: function(abbr) {
...
while (i < il) {
ch = abbr.charAt(i);
prev_ch = i ? abbr.charAt(i - 1) : '';
switch (ch) {
...
// YOUR CODE BELOW
case '^': // Ascension operator
if (!text_lvl && !attr_lvl) {
dumpToken();
context = context.parent.parent.addChild();
} else {
token += ch;
}
break;
Run Code Online (Sandbox Code Playgroud)
以下是新代码功能的逐行细分:
case '^': // Current character is ascension operator.
if (!text_lvl && !attr_lvl) { // Don't apply in text/attributes.
dumpToken(); // Operator signifies end of current token.
// Shift context up two levels.
context = context.parent.parent.addChild();
} else {
token += ch; // Add char to token in text/attribute.
}
break;
Run Code Online (Sandbox Code Playgroud)上面的实现按预期工作,例如:
function isAllowedChar(ch) {
...
special_chars = '#.>+*:$-_!@[]()|^'; // Added ascension operator "^"
Run Code Online (Sandbox Code Playgroud)
毫无疑问,您会想尝试一些更高级的、真实的测试用例。如果您想要启动,这是我修改过的源代码;将您的替换zen_textarea.min.js为这个以进行一些快速而肮脏的测试。
请注意,这只是将 DOM 提升了两个级别,并且不会将前面的元素视为一个组,因此 egdiv>div^*3不会像(div>div)*3. 如果这是您想要的,那么请查看右括号字符的逻辑,它使用前瞻来检查乘法。(就我个人而言,我建议不要这样做,因为即使对于缩写语法来说,它也非常难以阅读。)
| 归档时间: |
|
| 查看次数: |
761 次 |
| 最近记录: |