如果您在浏览器中查看页面源代码,您正在创建的内容看起来像这样(注意 ${row.content} 已经在服务器上被替换):
<td>0<td>
<td>
<div id="content" style="table-layout:fixed; width:405px; word-wrap:break-word;">
<script language="JavaScript" type="text/JavaScript">
function load(){
var content='The first row content';
document.getElementById("content").innerHTML=content;
document.getElementById("content").innerHTML=
Utf8.decode(document.getElementById("content").innerHTML);
}
window.onload=load;
</script>
</div>
</td>
<td>1<td>
<td>
<div id="content" style="table-layout:fixed; width:405px; word-wrap:break-word;">
<script language="JavaScript" type="text/JavaScript">
function load(){
var content='Some different content';
document.getElementById("content").innerHTML=content;
document.getElementById("content").innerHTML=
Utf8.decode(document.getElementById("content").innerHTML);
}
window.onload=load;
</script>
</div>
</td>
<td>2<td>
<td>
<div id="content" style="table-layout:fixed; width:405px; word-wrap:break-word;">
<script language="JavaScript" type="text/JavaScript">
function load(){
var content='Yet some more content';
document.getElementById("content").innerHTML=content;
document.getElementById("content").innerHTML=
Utf8.decode(document.getElementById("content").innerHTML);
}
window.onload=load;
</script>
</div>
</td>
您将拥有许多副本,function load()
并且多次window.onload
分配到哪里window.onload=load;
当 this 到达浏览器并被解释时,只有最后一个定义function load()
有效;只有你最后一次分配window.onload=load;
意味着什么(因为你不断地替换 window.onload 的值)——每次重新定义load()
都会替换前一次——所以只有你的最后一次 var content='${row.content}';
被执行。
此外,您将拥有许多<div>
具有相同“内容”ID 的标签,这是不允许的。
这些<td><div>...</div></td>
块中的每一个的内容都可以由服务器上的 JSP/JSTL 本身设置——无需通过 javascript 设置 innerHTML。您可以使用totalRow
您设置的 varStatus 来提供第一个数字<td>
——您不需要增加自己的计数器。
您可以使用表达式语言 (EL) 来访问每一行的内容值。
Inline style="blah blah blah" 很烂。只有在绝对必要时才使用它。
相反,将所有这些样式放在 CSS 定位 .contentbits:
style="table-layout:fixed; width:405px; word-wrap:break-word;"
变成
.contentbits {
table-layout:fixed;
width:405px;
word-wrap:break-word;
}
页面片段变得更加简单:
<c:forEach var="row" items="${tAdmin.rows}" varStatus="totalRow" step="1">
<td>${totalRow}</td>
<td>
<div class="contentbits">${row.content}</div>
</td>
</c:forEach>