如何使用jQuery选择多个单独的表列?

How to select multiple individual table columns with jQuery?

提问人:finefoot 提问时间:5/20/2023 更新时间:5/20/2023 访问量:55

问:

目前,我用于选择第 2 列和第 7 列的 jQuery 选择器是:

$("table tr td:nth-child(2) span:contains('something'), table tr td:nth-child(7) span:contains('something')")

有没有办法缩短这个时间?如果我想选择更多的列,它肯定会变得更长,并且(甚至可能变得更长)只是不断重复。span:contains('something')

jquery html-table jquery-selectors

评论

0赞 isherwood 5/20/2023
它只是两个选择器。考虑到实际代码只有三个字符,我不确定您期望如何缩短它。您可以尝试 codereview.stackexchange.com
0赞 finefoot 5/20/2023
@isherwood对不起,我不明白为什么只有三个字符?该示例适用于第 2 列和第 7 列。如果我需要 2、7、13、14、18、22 ......怎么办?然后它会变得非常重复。我在想类似或.tr nth-child(2,7) spantr nth-child(2)|nth-child(7) span

答:

0赞 Alexander Nenashev 5/20/2023 #1

你总是可以编写一些jQuery辅助函数:

jQuery.fn.tableColumnChildren = function(columnIndices, selector){

  const query = columnIndices.map(idx => `tr td:nth-child(${idx + 1}) ${selector}`).join(', ');
  return this.find(query);

};

const children = $('table').tableColumnChildren([0, 1], 'span:contains(something)');

console.log(children);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tr><td>test</td><td><span>something</span></td><td>more</td><tr>
<tr><td><span>something</span></td><td>cell test</td><td>data</td><tr>
</table>

评论

0赞 Alexander Nenashev 5/20/2023
@finefoot我没有找到任何方法来选择带有 .也许我们需要一些CSS专家。我会按照我提议的方式去做。developer.mozilla.org/en-US/docs/Web/CSS/:nth-child:nth-child
0赞 Roko C. Buljan 5/20/2023
@finefoot没有这样的事情——如果这就是你所希望的。td:nth-child(2,3,5)
0赞 finefoot 5/25/2023
@RokoC.Buljan:是的,这正是我所希望的。;)就像我在上面的评论中写的那样(在问题本身下)。所以我理解你的评论意味着没有选择器可以轻松做到这一点。那么,像这个答案建议的那样做,这不是一个好的选择吗?有什么替代方案?
0赞 Alexander Nenashev 5/25/2023
@finefoot我认为你的问题和我的回答完全没问题。没有CSS选择器来选择单个列索引,所以我的解决方案是可以的。我现在没有看到更好的选择。当然,你不能把它写成一个jQuery插件函数,而只是一个独立的函数,第一个参数是jQuery表对象。再说一次,如果你对我的解决方案感到满意,我会请你投票并接受我的答案,这样我将来就会有动力支持你,谢谢
0赞 finefoot 5/25/2023
@silentmantra 谢谢你的回答,我已经投了赞成票。这很有帮助,所以它得到了我的赞成。然而,引用SO帮助的话:“你可以接受你认为是解决你问题的最佳答案”,我还不相信这是我问题的最佳解决方案。就这样。:)