JQuery 选择器匹配 table 有 N 行
JQuery selector to match table having N rows
我有一个 div 和两个 table。我想 select 只有 table 有 N 行的行。
在 XPath 中我会使用:
//div[@class="div1"]/table[count(tr) = 2]/tr
是否有 jQuery select 或表达式可以做同样的事情?
这是 HTML 片段:
<div>
<div class="div1">
<ul>
<li>Line 1</li>
</ul>
<ul>
<li>Line 1</li>
<li>Line 2</li>
</ul>
</div>
</div>
我希望这可以在单个 jQuery select 或表达式中完成(例如,在 Interactive JQuery Tester 中理解)。我的出发点是:
'div.div1 ul li'
但这也 select 第一个 table 的行只有 1 行。
当然,"right way" 是为 HTML 添加 ID 或其他东西,以便 table 可以被唯一识别,但是在这种情况下我没有控制 HTML 我从中获取数据。我可以判断要使用多个 table 中的哪一个的唯一方法是根据行数。
是的,您可以使用单个 jQuery select 或。
在您的情况下,您可以组合 :has()
selector, the :eq()
selector, and the :last-child
pseudo class 以便 select 具有两个 li
子元素的 ul
元素。请记住 :eq()
selector 接受从零开始的索引(这意味着我们将使用 1
的索引以便 select 第二个 li
元素)。然后使用 :last-child
伪 class 以确保第二个 li
实际上是最后一个子元素。
$('.div1 ul:has(li:eq(1):last-child)')
片段:
$('.div1 ul:has(li:eq(1):last-child)').addClass('selected');
.selected { color: #f00; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<div class="div1">
<ul>
<li>Line 1</li>
</ul>
<ul>
<li>Line 1</li>
<li>Line 2</li>
</ul>
<ul>
<li>Line 1</li>
<li>Line 2</li>
<li>Line 3</li>
</ul>
</div>
</div>
或者,您也可以使用 :nth-child()
pseudo class。
$('.div1 ul:has(li:nth-child(2):last-child)')
片段:
$('.div1 ul:has(li:nth-child(2):last-child)').addClass('selected');
.selected { color: #f00; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<div class="div1">
<ul>
<li>Line 1</li>
</ul>
<ul>
<li>Line 1</li>
<li>Line 2</li>
</ul>
<ul>
<li>Line 1</li>
<li>Line 2</li>
<li>Line 3</li>
</ul>
</div>
</div>
我有一个 div 和两个 table。我想 select 只有 table 有 N 行的行。
在 XPath 中我会使用:
//div[@class="div1"]/table[count(tr) = 2]/tr
是否有 jQuery select 或表达式可以做同样的事情?
这是 HTML 片段:
<div>
<div class="div1">
<ul>
<li>Line 1</li>
</ul>
<ul>
<li>Line 1</li>
<li>Line 2</li>
</ul>
</div>
</div>
我希望这可以在单个 jQuery select 或表达式中完成(例如,在 Interactive JQuery Tester 中理解)。我的出发点是:
'div.div1 ul li'
但这也 select 第一个 table 的行只有 1 行。
当然,"right way" 是为 HTML 添加 ID 或其他东西,以便 table 可以被唯一识别,但是在这种情况下我没有控制 HTML 我从中获取数据。我可以判断要使用多个 table 中的哪一个的唯一方法是根据行数。
是的,您可以使用单个 jQuery select 或。
在您的情况下,您可以组合 :has()
selector, the :eq()
selector, and the :last-child
pseudo class 以便 select 具有两个 li
子元素的 ul
元素。请记住 :eq()
selector 接受从零开始的索引(这意味着我们将使用 1
的索引以便 select 第二个 li
元素)。然后使用 :last-child
伪 class 以确保第二个 li
实际上是最后一个子元素。
$('.div1 ul:has(li:eq(1):last-child)')
片段:
$('.div1 ul:has(li:eq(1):last-child)').addClass('selected');
.selected { color: #f00; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<div class="div1">
<ul>
<li>Line 1</li>
</ul>
<ul>
<li>Line 1</li>
<li>Line 2</li>
</ul>
<ul>
<li>Line 1</li>
<li>Line 2</li>
<li>Line 3</li>
</ul>
</div>
</div>
或者,您也可以使用 :nth-child()
pseudo class。
$('.div1 ul:has(li:nth-child(2):last-child)')
片段:
$('.div1 ul:has(li:nth-child(2):last-child)').addClass('selected');
.selected { color: #f00; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<div class="div1">
<ul>
<li>Line 1</li>
</ul>
<ul>
<li>Line 1</li>
<li>Line 2</li>
</ul>
<ul>
<li>Line 1</li>
<li>Line 2</li>
<li>Line 3</li>
</ul>
</div>
</div>