javascript - 排除项目及其内容元素

标签 javascript jquery jquery-selectors

我的页面中有大量元素,我试图只制作一个 div包括所有可打印的内容。

我有这个CSS:

@media print
{    
    .no-print, .no-print *
    {
        display: none !important;
    }
}

现在之前</body>我想运行 jQuery 代码,以便添加 .no-print每类div但是.content及其包含的元素。

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

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

但为了排除它的内容,我尝试过:

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

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

但他们都没有达到预期的结果。代码添加 .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;
});

$(function () {
  var elements = $('div:not(.content) *').filter(function(index, element) {
    return $(this).closest('div.content').length == 0;
  });
  
  elements.each(function(index, element) {
       console.log(index + ' --->  ' + element.outerHTML.substring(0, 30) + '....');
   });
});
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>

<div>
    <div class="header">YES...</div>
    <div class="nav">YES...</div>
    <div class="menu">
        YES
       <ul>
           YES
          <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">YES...</div>
<div class="content">
    NO
    <div>NO<table>....</table></div>
    <div>NO<table>....</table></div>
    <div>NO<table>....</table></div>
</div>
<div class="footer">YES...</div>
</div>

关于javascript - 排除项目及其内容元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38554512/

相关文章:

jquery - 使用 jquery 制作偏移动画

javascript - 选择一个标签并使用 jquery 更改其文本

javascript - 无法使用 jquery 选择无序列表的子项?

php - 使用 jquery 和 php 处理目录中的文件 - 获取状态并更新进度条

javascript - 在 Keydown 上获取多个字段?

javascript - jQuery AJAX 后的重定向问题

jquery - CSS 选择器匹配嵌套列表中的单个列表元素

javascript - 运行 fancybox-thumb 时隐藏其他图像

用于查找和连接特定字符串的 Javascript 正则表达式?

javascript - ChartJS 2.6 - 以编程方式更改条形图中条形的颜色