jquery加载函数忽略动态更改


jquery load function ignoring dynamic changes

我在页面上使用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重新加载时刷新它们。。