经常有人希望将列表中的第一个和/或最后一个项目与其他项目区别对待。有没有办法用小胡子做到这一点?行条纹呢?
(显然,在模板被处理后,总是可以使用 jquery 或其他任何东西来应用 css 类,或者其他什么,但我想知道模板级别的更多内容。)
经常有人希望将列表中的第一个和/或最后一个项目与其他项目区别对待。有没有办法用小胡子做到这一点?行条纹呢?
(显然,在模板被处理后,总是可以使用 jquery 或其他任何东西来应用 css 类,或者其他什么,但我想知道模板级别的更多内容。)
小胡子很轻,所以 AFAIK,它不提供该功能。
您可以使用类似的东西来获得偶数/奇数类:
var view = {
arr: ['one', 'two', 'three'],
clazz: function() {
return _counter++ % 2 == 0 ? 'even' : 'odd';
}
};
var template = '{{#arr}}<span class="{{clazz}}">{{.}}</span>{{/arr}}';
Mustache.to_html(template, view);
或者先对数据进行预处理,如下所示:
function preprocessArrayWithFirstLastClass(src) {
var clazz;
for (var i = 0; i < src.length; i++) {
clazz = i % 2 == 0 ? 'even' : 'odd';
if (i == 0) clazz += ' first';
if (i == src.length - 1) clazz += ' last';
src[i].clazz = clazz;
}
}
var view = {
arr: preprocessArrayWithFirstLastClass([{name: 'one'}, {name: 'two'}, {name: 'three'}])
};
var template = '{{#arr}}<span class="{{clazz}}">{{name}}</span>{{/arr}}';
Mustache.to_html(template, view);
我建议用纯 css/css3做这两个,不需要 js!当您尝试做的事情不是处理内容时,这似乎很理想。未来就是现在!:
利用nth-child();
http://dev.opera.com/articles/view/zebra-striping-tables-with-css3/
这不会为 ie7 和 ie8 ( http://caniuse.com/#search=nth-child ) 显示,但他们仍然可以获得内容,所以我认为这是一个胜利。
#nav li + li + li{
// Crazy styles on the 3rd li here!
}
(有很好的支持:http ://caniuse.com/#search=sibling )
使用 :last-child。
div#test p:last-child {color: red;}
div#test p:first-child {text-decoration: underline;}
:last-child 在 ie7 和 ie8 ( http://caniuse.com/#search=last-child )中不受支持,所以要小心你在这里做的事情会优雅地降级。奇怪的是, :first-child 是,所以你可以说,默认情况下对所有元素进行着色,然后从第一个子元素中显式删除它们,这实际上适用于所有浏览器。