Javascript 排除项目及其内容元素

Javascript 排除项目及其内容元素,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,我的页面中有很多元素,我试图只打印一个div,包括它的所有内容 我有这个css: @media print { .no-print, .no-print * { display: none !important; } } 现在,在之前,我想运行一个jQuery代码,以便在每个div中添加。没有print类,而是。content及其包含的元素 要排除.content我知道我必须做什么: $('div:not(.content)').addClass

我的页面中有很多元素,我试图只打印一个
div
,包括它的所有内容

我有这个css:

@media print
{    
    .no-print, .no-print *
    {
        display: none !important;
    }
}
现在,在
之前,我想运行一个jQuery代码,以便在每个
div
中添加
。没有print
类,而是
。content
及其包含的元素

要排除
.content
我知道我必须做什么:

$('div:not(.content)').addClass('no-print');
但为了排除其内容,我尝试:

$('div:not(.content,.content *)').addClass('no-print');

但它们都没有达到预期的效果。代码将
添加到所有div中。无打印
。打印时会显示一个空白页

更新: 我认为这里不需要html。但正如评论所要求的,我添加了一个示例:

<div>
   <div class="header">...</div>
   <div class="nav">...</div>
   <div class="menu>
       <ul>
          <li>menu item 1</li>
          <li>menu item 2</li>
          <li>menu item 3</li>
          <li>menu item 4</li>
          <li>menu item 5</li>
      </ul>       
   </div>
   <div class="sidebar">...</div>
   <div class="content">
       <div><table>....</table></div>
       <div><table>....</table></div>
       <div><table>....</table></div>
  </div>
   <div class="footer">...</div>
</div>

...
...
您可以使用过滤器:

var elements = $('div:not(.content) *').filter(function(index, element) {
      return $(this).closest('div.content').length == 0;
});
$(函数(){
变量元素=$('div:not(.content)*')。过滤器(函数(索引,元素){
返回$(this).closest('div.content')。长度==0;
});
元素。每个(函数(索引、元素){
log(index+'->'+element.outerHTML.substring(0,30)+'..);
});
});

对
对
对
  • 菜单项1
  • 菜单项2
  • 菜单项3
  • 菜单项4
  • 菜单项5
对 不 不 不 不 对
请共享完整的代码。。。包括
HTML
您可能还有其他一些div包含受打印样式影响的div.content。@BoltClock好的,
中有很多
div
s。content
这就是我试图排除其内容的原因elements@AshkanMobayen Khiabani:没关系。您有一个包含div.content的div(您现在在中编辑的HTML显示了这一点)。由于另一个div为:not(.content),它将接收display:none样式,并且您的content div将被隐藏。你还需要给那个div添加一个类,这样它就不会受到影响。哦,我搞错了。现在我明白你的意思了。如何将父母也排除在外?
var elements = $('div:not(.content) *').filter(function(index, element) {
      return $(this).closest('div.content').length == 0;
});