草庐IT

javascript - 禅编码 : ability to ascend the DOM tree using ^

coder 2024-07-25 原文

我 fork 了优秀的 zen-coding 项目,想用 ^ 实现 DOM 提升 - 所以你可以这样做:

html>head>title^body>h1 而不是 html>(head>title)+body>h1

最初我使用相当粗制滥造的正则表达式方法来实现。我现在已经使用@Jordan 的优秀答案实现了。我的fork is here

我还想知道的

是否存在我的函数返回错误值的情况?

最佳答案

免责声明:我从未使用过 zen-coding,这只是我第二次听说它,所以我不知道可能的问题是什么。也就是说,这似乎是一个可行的解决方案,或者至少非常接近于一个可行的解决方案。

我正在使用 Zen Coding for textarea v0.7.1为了这。如果您使用不同版本的代码库,则需要相应地调整这些说明。

一些评论者建议这不是正则表达式的工作,我同意。幸运的是,zen-coding 有自己的解析器实现,而且构建起来真的很容易!您需要在两个地方添加代码才能使其正常工作:

  1. ^ 字符添加到 isAllowedChar 函数中的 special_chars 变量(大约从 1694 行开始):

    function isAllowedChar(ch) {
        ...
        special_chars = '#.>+*:$-_!@[]()|^'; // Added ascension operator "^"
    
  2. 处理 parse 函数的 switch 语句中的新运算符(大约从 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;
    

    以下是新代码功能的逐行分割:

    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;
    

上面的实现按预期工作,例如:

html>head>title^body
html:5>div#first>div.inner^div#second>div.inner
html:5>div>(div>div>div^div)^div*2
html:5>div>div>div^^div

毫无疑问,您会想要尝试一些更高级的真实测试用例。 Here's my modified source如果你想快速启动;用这个替换你的 zen_textarea.min.js 进行一些快速和肮脏的测试。

请注意,这只是将 DOM 提升了两层,并没有将前面的元素视为一个组,例如div>div^*3 不会像 (div>div)*3 那样工作。如果这是您想要的,那么请查看右括号字符的逻辑,它使用前瞻来检查乘法。 (就个人而言,我建议不要这样做,因为即使是缩写语法,它也非常难读。)

关于javascript - 禅编码 : ability to ascend the DOM tree using ^,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5512945/

有关javascript - 禅编码 : ability to ascend the DOM tree using ^的更多相关文章

  1. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  2. ruby - 用逗号、双引号和编码解析 csv - 2

    我正在使用ruby​​1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\

  3. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  4. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

  5. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  6. c - Ruby - 源代码 - 编码风格 - 2

    查看Ruby代码,它具有以下proc_arity:staticVALUEproc_arity(VALUEself){intarity=rb_proc_arity(self);returnINT2FIX(arity);}更多的是C编码风格问题,但为什么staticVALUE在单独的一行而不是像这样的:staticVALUEproc_arity(VALUEself) 最佳答案 它来自UNIX世界,因为它有助于轻松grep函数的定义:$grep-n'^proc_arity'*.c或使用vim:/^proc_arity

  7. ruby - 如何以编程方式删除实例上的 "singleton information"以使其编码(marshal)? - 2

    我创建了一个由于“在运行时执行的单例元类定义”而无法编码的对象(这段代码的描述是否正确?)。这是通过以下代码执行的:#defineclassXthatmyusesingletonclassmetaprogrammingfeatures#throughcallofmethod:break_marshalling!classXdefbreak_marshalling!meta_class=class我该怎么做才能使对象编码正确?是否可以从对象instance_of_x的classX中“移除”单例组件?我真的需要一个建议,因为我们的一些对象需要通过Marshal.dump序列化机制进行缓存。

  8. ruby - 更改字符编码 - 2

    我在使用Ruby1.9.2p290更改文本文件的编码时遇到问题。我收到错误消息invalidbytesequenceinUTF-8(ArgumentError)。问题(我认为)在于字符集似乎是未知的。如果我执行以下操作,则从命令行:$filetest.txt我得到:Non-ISOextended-ASCIIEnglishtext,withCRLFlineterminators或者,或者,如果我这样做:$file-itest.txt我得到:test.txt:text/plain;charset=unknown但是,如果我这样做,在Ruby中:data=File.open("test.tx

  9. ruby - 在 Mechanize 中使用 JavaScript 单击链接 - 2

    我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan

  10. ruby-on-rails - 在 rails 中显示 base64 编码的图像 - 2

    我正在向我的Controller发送一个base64图像并按原样保存它。现在我需要显示该图像。这是我要显示的内容,但未显示图像:"/>为了编码,我使用了这个java脚本函数encodeURIComponent();我的编码图像格式:data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/........ 最佳答案 你不需要解码base64应该可以 关于ruby-on-rails-在rails中显示base64编码的图像,我们在StackOve

随机推荐