我正在创建一个Eleventy短代码(主要用于markdown),它接受任意数量的参数,然后在输出所有内容之前对它们应用格式化。它隐约看起来像这样:
eleventyConfig.addShortcode("theShortcode", function(...args) {
let list = '';
args.forEach( function( listItem) {
list += '<li>' + listItem + '</li>';
});
return list;
});然后对任意数量的项目执行类似的操作:
{% theShortcode "item1" "item2" "item3" %}所以我不相信这是生成此内容的最友好的用户方式。至少,我怀疑在一般情况下,项目列表将相当长,并且在编辑器中变得令人痛苦地不可读。有没有更聪明的方法来达到同样的结果,或者我可以在这里使用更好的语法?
发布于 2020-11-13 17:36:03
如果你的快捷代码只是创建一个列表,为什么不直接用普通的markdown来写呢?毕竟,Markdown有一个syntax for ordered and unordered lists:
- unordered list item 1
- unordered list item 2
- unordered list item 3
1. ordered list item 1
2. ordered list item 2
3. ordered list item 3如果您的示例被简化了,并且您实际上需要输出在普通标记中不可能实现的自定义超文本标记语言,那么您可以使用paired shortcode。它可以做与您的常规短码相同的事情,但成对的短码允许您在开始和结束标记之间编写普通内容,这更容易阅读。作为示例,下面是作为配对的短代码的列表短代码:
eleventyConfig.addShortcode("makelist", content => {
const items = content.split(/\r\n|\r|\n/).filter(Boolean);
const list = items.map(item => `<li>${item}</li>`);
return `<ul>${"\n"}${list.join("\n")}${"\n"}</ul>`;
});您可以向函数添加更多参数,并在短码的开始标记中传递参数(如在有序列表和无序列表之间切换)。像这样使用它:
{% makelist %}
list item 1
list item 2
list item 3
{% endmakelist %}https://stackoverflow.com/questions/64742599
复制相似问题