我在页面上使用jQuery的load
函数来获取网页的内容,然后打印它。这是我的代码:
$('#container').load('<?php print $_GET['load']; ?>', function(data) {
window.print();
});
其中变量"load"是url。
问题是,加载的页面附带了一个javascript设计的过滤器,这意味着用户可以在该页面上单击按钮来删除或显示某些信息,例如{ display: none }
。
但是,被用户隐藏的项目确实会显示在这个新页面中。我理解为什么会这样,JavaScript并没有改变页面的基本HTML,它仍然存在,但我想找到解决这个问题的方法。
因此,当#container用新内容刷新时,所有旧的DOM元素(HTML的内部版本)都会被销毁和替换,因此它失去了display:none属性。
解决这个问题的一种方法是这样做:
<div id='container'>
<div class="a">Stuff 1</div>
<div class="b">Stuff 2</div>
<div class="c">Stuff 3</div>
</div>
<input type="button" class="hide_something" data-hide-class="a" value="Hide A">
<input type="button" class="hide_something" data-hide-class="b" value="Hide B">
<input type="button" class="hide_something" data-hide-class="c" value="Hide C">
$('.hide_something').on("click", function() {
$('#container').addClass('hide_' + $(this).data("hide-class"));
});
.hide_a .a,
.hide_b .b,
.hide_c .c { display: none; }
这是一把小提琴:http://jsfiddle.net/2Qkjn/
因此,基本上,当用户单击按钮时,它会在外部容器中添加一个类,CSS会使该类隐藏内部内容。。替换内部内容不会更改CSS规则。。
另一种方法是将状态存储在JS中,然后在DOM重新加载时刷新它们。。