我有这个JavaScript(使用jQuery):
var g_files_added, socket, cookie, database = null;
var file_contents = [];
function viewFile(key, filename) {
$('#title-filename').text(filename);
$('.prettyprint').text(file_contents[key]);
$('#viewFileModal').modal('show');
}
$(document).ready(function() {
$(document).on('shown', '#viewFileModal', function(event) {
prettyPrint();
});
});
// Variables have been set in code not shown, irrelevant to problem.
// prettyPrint() is called everytime the #viewFileModal is shown,
// but its effect is only felt once.
因此,每次显示viewFileModal模式框(由Bootstrap提供)时都会调用prettyPrint()
,这只是每页加载时似乎只有一次效果。
我已经尝试评论prettyPrint()
并在出现模式框后进入JS控制台。它确实只在第一次显示框时产生效果(每页加载)。
有什么想法吗?我一直坚持这一点。我也尝试在viewFile函数中调用prettyPrint()
;但效果是一样的。
非常感谢。
萨姆。
答案 0 :(得分:6)
调用“prettyPrint()”会在对其进行美化后的名为“prettyPrinted”的PRE标记中添加一个类。下面的行将删除页面上“prettyPrinted”类的所有实例,以便prettyPrint()函数可以重新解析您的PRE标记。这可以在没有动态添加PRE标签到DIV的情况下完成。
$('.prettyprinted').removeClass('prettyprinted');
答案 1 :(得分:1)
感谢Matei。解决方案是改变为这样。 也就是说,动态添加整个pre而不仅仅是文本。
var g_files_added, socket, cookie, database = null;
var file_contents = [];
function viewFile(key, filename) {
$('#title-filename').text(filename);
$('#fileblock').html('<pre class="prettyprint">' + file_contents[key] + '</pre>'); // fileblock is a div.
$('#viewFileModal').modal('show');
}
$(document).ready(function() {
$(document).on('shown', '#viewFileModal', function(event) {
prettyPrint();
});
});
:)
答案 2 :(得分:1)
约瑟夫·波夫的回答是正确的,但你必须要小心。 prettPrint()包装扫描标签中的所有内容。如果删除prettyprinted类,则不会删除扫描标记。除非您正在清除pre的内容(或剥离所有扫描标记),否则每次调用prettyPrint()时,您都将添加扫描标记,这将包装旧的扫描标记。它可以很快失控。