我扩展了默认的较少功能,以支持一些基本列表。我添加了如下所示的函数“ nth”:

"nth": function(obj, index){
    var list = obj.value.split(",");
    var n = index.value;
    obj.value = list[n-1].trim();
    return new tree.Anonymous(obj);
 }


然后我添加了另一个函数“ convertstrtovar”,如下所示:

convertstrtovar: function(obj){
     var str = obj.value.toString();
     str = str.replace(/(@)/gi, '');
     str = '~"@{' + str + '}"';
     obj.value = str;
     return new tree.Anonymous(obj);
}


这将接收类似于'@white'的String并将其转换为〜“ @ {white}”。下面给出了较少mixin的示例代码。

@button-text-colors: "@white, @dark, @red"; //parsed as a comma separated list.
@white: white;
@dark: black;
@red: red;

.something(@color){
    color: @color;
}

.some{
    @t: convertstrtovar(nth(@button-text-colors, 1));
    .something(@t);
}


这给我的输出如下:

.some {
    color: ~"@{white}";
}


为什么通常在〜“ @ {white}”少得到@white中存储的值的情况下,将〜“ @ {white}”打印为字符串,而不将其评估为变量white?

最佳答案

为什么〜“ @ {white}”通常以〜“ @ {white}”的形式输出为字符串,而不会被评估为白色变量


因为LESS在解析输入时会评估这些东西(但是您的函数会在此之后创建一个新的字符串对象)。

实际上,您可以使用默认的LESS语言构造来实现所需的功能(无需任何自定义功能修改):

@button-text-colors: 'white', 'dark', 'red';
@white: white;
@dark: black;
@red: red;

.something(@color){
    color: @color;
}

.some{
    @t: extract(@button-text-colors, 1);
    .something(@@t);
}


不,认真地说,我建议您在尝试使用您自己的自定义功能扩展它之前,先考虑了解有关LESS现有功能的更多信息...(尽管我必须承认过时的LESS文档是一个重大问题-至少要花点时间请参阅https://github.com/SomMeri/less4j/wiki/_pages-这是目前最详细的LESS文档)。

关于javascript - 如何使字符串指向Less中的变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19419596/

10-12 15:57