jQuery - select 一个包含 n 个重复 child 元素的元素

jQuery - select an element which contain n number of duplicate child elements

这是我必须与之合作的HTML。 spacer 类 基本上是缩进文本。

<table>
 <tr>
  <td>
   <span class="spacer"></span>
   <span class="spacer"></span>
   HEADING 1
  </td>
 </tr>
 <tr>
  <td>
   <span class="spacer"></span>
   <span class="spacer"></span>
   <span class="spacer"></span>
   SUBHEADING 1
  </td>
 </tr>
 <tr>
  <td>
   <span class="spacer"></span>
   <span class="spacer"></span>
   <span class="spacer"></span>
   SUBHEADING 2
  </td>
 </tr>
 <tr>
  <td>
   <span class="spacer"></span>
   <span class="spacer"></span>
   HEADING 2
  </td>
 </tr>
</table>

我应该如何形成我的 jQuery 选择器,以便我能够获取标题行?和副标题?

我试过 $(tr).has('td.spacer') 但这并没有真正帮助,因为他们都使用它并且有多个(2 个用于 "headings",3 个用于 "subheadings")

您可以过滤

var f = function(n) {
    return function() {
        return $(this).find('.spacer').length === n;
    }
}

var headings   = $('td').filter( f(2) );
var subheading = $('td').filter( f(3) ); 
// ..etc

var f = function(n) {return function() {return $(this).find('.spacer').length === n}};

$('td').filter( f(2) ).css('color','red');
$('td').filter( f(3) ).css('color','blue');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
 <tr>
  <td>
   <span class="spacer"></span>
   <span class="spacer"></span>
   HEADING 1
  </td>
 </tr>
 <tr>
  <td>
   <span class="spacer"></span>
   <span class="spacer"></span>
   <span class="spacer"></span>
   SUBHEADING 1
  </td>
 </tr>
 <tr>
  <td>
   <span class="spacer"></span>
   <span class="spacer"></span>
   <span class="spacer"></span>
   SUBHEADING 2
  </td>
 </tr>
 <tr>
  <td>
   <span class="spacer"></span>
   <span class="spacer"></span>
   HEADING 2
  </td>
 </tr>
</table>

根据 .spacer 个跨度元素的计数获取。使用 :has(), :not() and :nth-child() 伪 class 选择器的组合。

// get head - which don't have 3rd `spacer` element
$('tr:has(:not(td .spacer:nth-child(3)))').css('color', 'green');

// get subhead - which have 3rd `spacer` element
$('tr:has(td .spacer:nth-child(3))').css('color', 'red')
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tr>
    <td>
      <span class="spacer"></span>
      <span class="spacer"></span>
      HEADING 1
    </td>
  </tr>
  <tr>
    <td>
      <span class="spacer"></span>
      <span class="spacer"></span>
      <span class="spacer"></span>
      SUBHEADING 1
    </td>
  </tr>
  <tr>
    <td>
      <span class="spacer"></span>
      <span class="spacer"></span>
      <span class="spacer"></span>
      SUBHEADING 2
    </td>
  </tr>
  <tr>
    <td>
      <span class="spacer"></span>
      <span class="spacer"></span>
      HEADING 2
    </td>
  </tr>
</table>