【发布时间】:2017-11-13 06:43:41
【问题描述】:
我有一个简单的 ajax 请求返回一些数据,然后插入到模板文字中。我想知道是否可以在模板中插入“if”语句?
如果 json 对象具有第 5 种颜色,则本质上是添加另一行代码。
$.ajax({
url: 'http://localhost:8888/ColourCatchr%202/app/search.php'
}).done(function(results){
var res = jQuery.parseJSON(results);
console.log(res);
$.each(res,function(index,result){
$('.palettes').append(`
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">${result.name}</h3>
</div>
<div class="panel-body">
<div class="col-md-12 colors">
<div class="color" style=background-color:#${result['color 1']}><h6>${result['color 1']}</h6></div>
<div class="color" style=background-color:#${result['color 2']}><h6>${result['color 2']}</h6></div>
<div class="color" style=background-color:#${result['color 3']}><h6>${result['color 3']}</h6></div>
<div class="color" style=background-color:#${result['color 4']}><h6>${result['color 4']}</h6></div>
${if(result['color 5']){
<div class="color" style=background-color:#${result['color 5']}><h6>${result['color 5']}</h6></div>
}
}
<div class="color" style=background-color:#${result['color 5']}><h6>${result['color 5']}</h6></div>
<p>on hover change to translucent background and black text for ecah color</p>
</div>
</div>
<div class="panel-footer">
<a class="btn btn-info btn-lg" href="update.html?id=${result.id}">Edit</a>
<a class="btn btn-danger btn-lg">Delete</a>
</div>
</div>`
)
})
})
【问题讨论】:
-
"如果可以在模板中插入 'if' 语句" 不是。您只能在模板文字中使用 表达式。
-
不要在循环中附加标记。这会导致大量不必要的渲染周期,这在 JS 性能方面几乎是你能做的最糟糕的事情。使用
var rows = $.map(res, function(result){ return ... })首先生成所有标记,然后使用$('.palettes').append(rows.join(''))一次附加所有生成的标记。 -
@Thomas 对此表示感谢。刚刚实现了这个,它确实工作得更好!
标签: javascript jquery ecmascript-6