如何用 JS 的包含文件覆盖 td 内容?
How to overwrite td content with an include file with JS?
我有一个包含不同 htm 文件名称的菜单,如下所示:
我想当我点击一个时,td 的内容显示我刚刚点击的文档,我有一个用于列出这些名称,并将调用设置为 JS 函数:
<% for (int i=0; i < fileNames.length; i++) { %>
<tr>
<td onClick="refreshContent(this)"> <%= fileNames[i] %> </td>
</tr>
<% } %>
我使用的 Jsp 默认显示第一个文档的内容:
<td id="documentContaner">
<%@ include file ="/docs/document1.htm" %>
</td>
我想要在我的 JS 函数中使用这样的东西:
function refreshContent(element) {
var name = element.textContent;
var tdContaner = document.getElementById("documentContaner");
tdContaner.innerHTML = '<%@ include file ="/docs/'+ name +'.htm" %>';
}
第一个问题:这样可以吗?还是我需要刷新页面才能显示新内容?
第二个问题:如果可以的话,如何在TD里面写一个include文件?
您不能使用 JavaScript 将服务器端代码插入 DOM。在将结果传送到浏览器之前,服务器端代码需要由服务器上适当的运行时/解释器执行。
要实现这种效果,您需要编写一个 HTTP 端点,其中 returns 只是 该单元格的内容,然后使用 Ajax (通常通过 XMLHttpRequest 对象)获取它,然后使用 DOM 方法将结果插入单元格。
您可以从页面发送 AJAX 以加载文件
<script>
function refreshContent(element) {
var name = element.textContent;
var xhr= new XMLHttpRequest();
xhr.open('GET', '/docs/'+ name +'.htm', true);
xhr.onreadystatechange= function() {
if (this.readyState!==4) return;
if (this.status!==200) return; // or whatever error handling you want
element.innerHTML= this.responseText;
};
xhr.send();
}
</script>
<table>
<tr>
<td onClick="refreshContent(this)">test</td>
</tr>
</table>
如果您的页面上有 jquery,请使用它
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script>
$(function () {
$('#table-id').on('click', 'td.clickable', function (event) {
event.preventDefault();
var $element = $(this);
var name = $element.text();
$.get('/docs/'+ name +'.htm', function (response) {
$element.html(response);
})
});
})
</script>
<table id="table-id">
<tr>
<td class="clickable">test</td>
</tr>
</table>
UPD. 或预加载文件和名称以及 show/hide 它们
<script>
function refreshContent(element) {
var name = element.children[0];
var file = element.children[1];
name.style.display = 'none';
file.style.display = null;
}
</script>
<table>
<tr>
<% for (int i=0; i < fileNames.length; i++) { %>
<tr>
<td onClick="refreshContent(this)">
<div class="name"><%= fileNames[i] %></div>
<div class="file" style="display: none;"><%@ include file ="/docs/document1.htm" %></div>
</td>
</tr>
<% } %>
</tr>
</table>
和jquery
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script>
$(function () {
$('#table-id').on('click', 'td.clickable', function (event) {
var $element = $(this);
var $name = $element.find('.name');
var $file = $element.find('.file');
$name.hide();
$file.show();
});
})
</script>
<table id="table-id">
<tr>
<% for (int i=0; i < fileNames.length; i++) { %>
<tr>
<td class="clickable">
<div class="name"><%= fileNames[i] %></div>
<div class="file" style="display: none;"><%@ include file ="/docs/document1.htm" %></div>
</td>
</tr>
<% } %>
</tr>
</table>
我有一个包含不同 htm 文件名称的菜单,如下所示:
我想当我点击一个时,td 的内容显示我刚刚点击的文档,我有一个用于列出这些名称,并将调用设置为 JS 函数:
<% for (int i=0; i < fileNames.length; i++) { %>
<tr>
<td onClick="refreshContent(this)"> <%= fileNames[i] %> </td>
</tr>
<% } %>
我使用的 Jsp 默认显示第一个文档的内容:
<td id="documentContaner">
<%@ include file ="/docs/document1.htm" %>
</td>
我想要在我的 JS 函数中使用这样的东西:
function refreshContent(element) {
var name = element.textContent;
var tdContaner = document.getElementById("documentContaner");
tdContaner.innerHTML = '<%@ include file ="/docs/'+ name +'.htm" %>';
}
第一个问题:这样可以吗?还是我需要刷新页面才能显示新内容? 第二个问题:如果可以的话,如何在TD里面写一个include文件?
您不能使用 JavaScript 将服务器端代码插入 DOM。在将结果传送到浏览器之前,服务器端代码需要由服务器上适当的运行时/解释器执行。
要实现这种效果,您需要编写一个 HTTP 端点,其中 returns 只是 该单元格的内容,然后使用 Ajax (通常通过 XMLHttpRequest 对象)获取它,然后使用 DOM 方法将结果插入单元格。
您可以从页面发送 AJAX 以加载文件
<script>
function refreshContent(element) {
var name = element.textContent;
var xhr= new XMLHttpRequest();
xhr.open('GET', '/docs/'+ name +'.htm', true);
xhr.onreadystatechange= function() {
if (this.readyState!==4) return;
if (this.status!==200) return; // or whatever error handling you want
element.innerHTML= this.responseText;
};
xhr.send();
}
</script>
<table>
<tr>
<td onClick="refreshContent(this)">test</td>
</tr>
</table>
如果您的页面上有 jquery,请使用它
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script>
$(function () {
$('#table-id').on('click', 'td.clickable', function (event) {
event.preventDefault();
var $element = $(this);
var name = $element.text();
$.get('/docs/'+ name +'.htm', function (response) {
$element.html(response);
})
});
})
</script>
<table id="table-id">
<tr>
<td class="clickable">test</td>
</tr>
</table>
UPD. 或预加载文件和名称以及 show/hide 它们
<script>
function refreshContent(element) {
var name = element.children[0];
var file = element.children[1];
name.style.display = 'none';
file.style.display = null;
}
</script>
<table>
<tr>
<% for (int i=0; i < fileNames.length; i++) { %>
<tr>
<td onClick="refreshContent(this)">
<div class="name"><%= fileNames[i] %></div>
<div class="file" style="display: none;"><%@ include file ="/docs/document1.htm" %></div>
</td>
</tr>
<% } %>
</tr>
</table>
和jquery
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script>
$(function () {
$('#table-id').on('click', 'td.clickable', function (event) {
var $element = $(this);
var $name = $element.find('.name');
var $file = $element.find('.file');
$name.hide();
$file.show();
});
})
</script>
<table id="table-id">
<tr>
<% for (int i=0; i < fileNames.length; i++) { %>
<tr>
<td class="clickable">
<div class="name"><%= fileNames[i] %></div>
<div class="file" style="display: none;"><%@ include file ="/docs/document1.htm" %></div>
</td>
</tr>
<% } %>
</tr>
</table>