Javascript Jade/Pug mixin延伸段

Javascript Jade/Pug mixin延伸段,javascript,node.js,pug,Javascript,Node.js,Pug,我开始在工作中使用Jade,我遇到了一个在Google上找不到答案的问题 我想写这样一个混合体: mixin menu(...MenuList) ul.main-menu each item in MenuList li: a(href='##{item.toLowerCase()}.html')= item 此mixin适用于单名链接,如+菜单('Contacts','FAQ'),但不适用于多字链接,如+菜单('Contact Us','Our Price')

我开始在工作中使用Jade,我遇到了一个在Google上找不到答案的问题

我想写这样一个混合体:

mixin menu(...MenuList) 
  ul.main-menu
    each item in MenuList
      li: a(href='##{item.toLowerCase()}.html')= item  
此mixin适用于单名链接,如
+菜单('Contacts','FAQ')
,但不适用于多字链接,如
+菜单('Contact Us','Our Price')

我试着写一些东西,比如:

li: a(href='##{item.toLowerCase().replace(' ', '_')}.html')= item  
或:


但对我来说什么都不管用。也许是缺乏JS技能,但如果有人能帮助我,我会很高兴。

问题在于你在href中的传递方式。这是一个有效的


预期的名称是什么<代码>我们的价格.html?是的,Ryan!我想要插入的不是间隙,而是您第一次尝试(
item.toLowerCase().replace('''.''.'
)的问题,即它只替换了一个空格,还是出现了其他问题?如果我只使用.toLowerCase(),它工作正常:呈现'our product.html',但它有间隙,当我添加.replace时,它呈现'item.toLowerCase().replace('.'.'“。它以字符串形式呈现函数。哦,那是引号。使用双引号避免与周围环境冲突,并
.replace(//g,'.''.'
替换所有实例,而不仅仅是第一个实例。感谢您的回复!但它以前是有效的。问题是如何处理词与词之间的差异,因为我得到的是我们的price.html而不是我们的_price.htmlthat@DmitriyKavraiskyi我也更新了答案和密码。希望这能帮上忙谢谢!这就是我一直在寻找的!另外,我对它做了一些修改,因为不需要在间隙中:-var replace=item.split(“”).join(“”);li:a&attributes({href:'#'+replace.toLowerCase()+'.html'})=item@DmitriyKavraiskyi干杯
li: a(href='##{item.toLowerCase(function(x){ return x.replace(' ', '_')})}.html')= item
mixin menu(...MenuList)
  - var patt = /\s+/i; // This checks for whitespace.

  ul.main-menu
    each item in MenuList
     if patt.test(item)
       - var newitem = item.split(' ').join('_');

       li: a&attributes({ href: '#' + newitem.toLowerCase() + '.html' })= item
     else
       li: a&attributes({ href: '#' + item.toLowerCase() + '.html' })= item

+menu('my-list', 'Contact Us', 'Hello', 'Our Price', 'My Price')

// result
- my-list
- Contact Us
- Hello
- Our Price
- My Price