Node.js 如何在EJS中动态添加选项标记?
我觉得这是草率的,正是EJS试图阻止的。有没有一种方法可以在不连接循环字符串的情况下添加值和选项Node.js 如何在EJS中动态添加选项标记?,node.js,express,ejs,Node.js,Express,Ejs,我觉得这是草率的,正是EJS试图阻止的。有没有一种方法可以在不连接循环字符串的情况下添加值和选项 <!-- developer field option values --> <% var optionstring = ""; for (var i = 0; i < developers.length; i++){ optionstring += '<option value="' + developers[i]._id + '"
<!-- developer field option values -->
<% var optionstring = "";
for (var i = 0; i < developers.length; i++){
optionstring += '<option value="' + developers[i]._id + '">' + developers[i].firstname
}
%>
<% for (var i = 0; i < users.length; i++){ %>
<tr>
<td><%= users[i].firstname %></td>
<td><select class="assign_dev"><option value="unassigned">unassigned<%- optionstring %></select></td>
<td><select class="ticket_status"><option value="open">Open</option><option value="closed">Closed</option></select></td>
</tr>
未分配
开闭式
如果您的目标是避免串接字符串,则可以关闭代码块,插入html,然后重新打开代码块
<% for (var i = 0; i < users.length; i++){ %>
<tr>
<td><%= users[i].firstname %></td>
<td>
<select class="assign_dev">
<option value="unassigned">unassigned</option>
<%
for (var j = 0; j < developers.length; j++){
%><option value="<%= developers[j]._id %>"><%= developers[j].firstname %><%
}
%>
</select>
</td>
<td>
<select class="ticket_status">
<option value="open">Open</option>
<option value="closed">Closed</option>
</select>
</td>
</tr>
%>
未分配
打开
关闭
%>
然而,我不认为真正的目标应该是避免连接。目标应该是使代码清晰高效(只要效率不牺牲清晰性)。在我看来,您的原始代码更好。由于您需要反复列出相同的选项,因此在前面的循环中创建一次列表,然后在第二个循环中重用缓存的字符串比嵌套循环更高效、更清晰。您可以在选择中填充选项,而不使用循环。 我使用Array.prototype.map函数处理每个项目(参见下面的示例)
请选择一个开发者
{ %>
- 生成动态选项和文本字段*
<% for(var i = 0; i < filterData.length; i++) { %> <select name="hour" > <% for(var j = 0; j < filterData.length; j++) { %> <option value='<%= filterData[j] %>'><%= filterData[j] %></option> <% } %> <input type="text" id="sssss"> </select> <% } %>
var I
。当循环分开时这很好,但是当它们嵌套时,内部循环重写了外部循环的迭代器变量。我修复了上面的代码,将j
用于内部循环。
<% for(var i = 0; i < filterData.length; i++) { %>
<select name="hour" >
<% for(var j = 0; j < filterData.length; j++) { %>
<option value='<%= filterData[j] %>'><%= filterData[j] %></option>
<% } %>
<input type="text" id="sssss">
</select>
<% } %>