我在这里有一个问题,如果你们能帮助我,我会为此感到高兴。所以我想隐藏一个按钮" changeOrderUp"当它在第一行并希望与" changeOrderDown"相同时按钮,当它在最后一行中找到时。但FireBug返回此错误:"语法错误:预期表达式,获得关键字'如果'" ,我无法确定原因。请帮我!
这是我的js代码:
for(var ordem = (data.var_pergunta).length; ordem >= 1 ; ordem--){
$('<tr><td class="ordem-pergunta-'+ordem+'">'+ordem+'</td> \
<td class="ds-pergunta-'+ordem+'">'+data.var_pergunta[ordem - 1].ds_pergunta+'</td> \
<td class="cd-pergunta-'+ordem+' hide">'+data.var_pergunta[ordem - 1].cd_pergunta+'</td> \
<td><button id="'+ordem+'" class="btn-change-order-up btn btn-primary '+if(ordem == 1){ document.write('hide');}+'" type="button"><i class="fa fa-angle-up"></i></button> \
<button id="'+ordem+'" class="btn-change-order-down btn btn-info '+if(ordem == (data.var_pergunta).length)){ document.write('hide');}+'" type="button"><i class="fa fa-angle-down"></i></button> \
</td></tr>').insertAfter('.tr-ordem-pergunta');
}
答案 0 :(得分:5)
Javascript不允许内联if
条件。如果您需要内联条件,则应使用ternary operator,其行为与if
块非常相似。
除此之外,您不应该使用document.write
。它不会返回用于连接的字符串,但会删除文档并将该字符串写入页面。
您应该替换
的每个实例if(ordem == 1){ document.write('hide');}
类似
(ordem === 1 ? 'hide' : '')
这将:
ordem
与1进行比较,严格(===
比==
更严格)'hide'
您还可以通过在每行的末尾放置+
来简化代码,而不是转义换行符。使用像这样的逃避更难阅读。
总之,我会重构那个片段:
for (var ordem = data.var_pergunta.length; ordem >= 1; --ordem){
$('<tr><td class="ordem-pergunta-' + ordem + '">' + ordem + '</td>' +
'<td class="ds-pergunta-'+ordem+'">' +
data.var_pergunta[ordem - 1].ds_pergunta +
'</td>' +
'<td class="cd-pergunta-'+ordem+' hide">' +
data.var_pergunta[ordem - 1].cd_pergunta +
'</td>' +
'<td><button id="'+ordem+'" class="btn-change-order-up btn btn-primary ' +
(ordem === 1 ? 'hide' : '') +
'" type="button"><i class="fa fa-angle-up"></i></button>' +
'<button id="'+ordem+'" class="btn-change-order-down btn btn-info ' +
(ordem === data.var_pergunta.length ? 'hide' : '') +
'" type="button"><i class="fa fa-angle-down"></i></button>' +
'</td></tr>').insertAfter('.tr-ordem-pergunta');
}
如果字符串很长,那么最好不要使用像Handlebars.js这样的真实模板库。作为模板编写,您的字符串可能变为:
<tr>
<td class="ordem-pergunta-{{ordem}}">{{ordem}}</td>
<td class="ds-pergunta-{{ordem}}">{{prev_ordem.ds_pergunta}}</td>
<td class="cd-pergunta-{{ordem}} hide">{{prev_ordem.cd_pergunta}}</td>
<td>
<button id="{{ordem}}" class="btn-change-order-up btn btn-primary {{#if first_ordem}}hide{{/if}}" type="button">
<i class="fa fa-angle-up"></i>
</button>
<button id="{{ordem}}" class="btn-change-order-down btn btn-info {{#if last_ordem}}hide{{/if}}" type="button">
<i class="fa fa-angle-down"></i>
</button>
</td>
</tr>
你会把它呈现为:
template({
ordem: ordem,
prev_ordem: data.var_pergunta[ordem - 1]
first_ordem: ordem === 1,
last_ordem: order === data.var_pergunta.length
});
答案 1 :(得分:0)
试试这个。将条件值存储在变量中并打印出来。
for(var ordem = (data.var_pergunta).length; ordem >= 1 ; ordem--){
if(ordem == 1){ var val = document.write('hide'); }
if(ordem == (data.var_pergunta).length)){ var another = document.write('hide');}
$('<tr><td class="ordem-pergunta-'+ordem+'">'+ordem+'</td> \
<td class="ds-pergunta-'+ordem+'">'+data.var_pergunta[ordem - 1].ds_pergunta+'</td> \
<td class="cd-pergunta-'+ordem+' hide">'+data.var_pergunta[ordem - 1].cd_pergunta+'</td> \
<td><button id="'+ordem+'" class="btn-change-order-up btn btn-primary '+val+'" type="button"><i class="fa fa-angle-up"></i></button> \
<button id="'+ordem+'" class="btn-change-order-down btn btn-info '+another+'" type="button"><i class="fa fa-angle-down"></i></button> \
</td></tr>').insertAfter('.tr-ordem-pergunta');
}