我有一个div,我想写一个弹出窗口(用于打印)。
我正在使用jQuery的html()函数抓取我想要的div的内容,如下所示:
function printOptions() {
var printwindow = window.open('', 'Report', 'height=600,width=600');
printwindow.document.write('<html><head><title>Report</title>');
printwindow.document.write('</head><body>');
printwindow.document.write($('#ReportHeader').html());
printwindow.document.write($('#ReportData').html());
printwindow.document.write('</body></html>');
printwindow.document.close();
printwindow.print();
return true;
}
但是,在我document.write()#ReportHeader和#ReportData div的内容之前,我想稍微修改它们。
具体来说,我想用包含该文本框值的简单范围替换所有文本框。
类似的东西:
$("input[type=text]").each(function() {
$(this).replaceWith("<span>" + $(this).val() + "</span>");
});
如何在不改变现有页面的情况下,只对这些div的内容执行此操作?我只是想修改我要写到打印窗口的内容。我不认为我可以选择html()返回的内容,因为它只是返回一个字符串。
我做〜不想〜修改正在启动弹出窗口的原始页面。只是我将要写入弹出窗口的内容。
关于如何做到这一点的任何想法?
答案 0 :(得分:1)
您可以使用.clone()
来有效地执行此操作,如下所示:
printwindow.document.write(
$('#ReportHeader').clone().find("input[type=text").each(function() {
$(this).replaceWith("<span>" + $(this).val() + "</span>");
}).end().html()
);
这会获得原始#ReportHeader
及其子级的副本,以便您可以在不修改原始内容的情况下操纵它们,并且不会忍受html字符串的费用 - &gt;节点转换,这是非常昂贵的。
答案 1 :(得分:0)
你可以通过常规的jQuery选择器和修饰符对div做任何你想做的事。
var $reportHeader = $($('#ReportHeader').html());
// Remove some div
$reportHeader.find('div.to_remove').remove();
// Now use $reportHeader.html() to add the modified contents to printwindow
答案 2 :(得分:0)
您可以克隆内容,然后执行替换,然后编写它:
var cloned = $($('#ReportData').html());
使用$('html string')
功能:
答案 3 :(得分:0)
要使用静态span元素替换所有输入,您可以执行以下操作..(未测试)
$(":input").each(function() {
var parent = $(this).parent();
var val = $(this).val();
$(parent).remove($(this).append("<span>" + $(this).val() + "</span>"));
});