检索受“rowspan”影响的行的列索引的最有效方法是什么?

请考虑下表:

A B C
1 Apples Oranges Pears
2 Subcategory Heading ASP.Net Other
3 MVC PHP
4 Red Green Blue
Some pointless footer content

如何使用jQuery为包含文本“MVC”或“PHP”的单元格检索正确的列号? 正确的答案是第3列,但只使用.prevAll().length只计算前一个单元格的数量,在这种情况下,它们不能准确反映它们的实际列位置?

我确定我需要使用each() ,但我也在寻找最有效的实现。

像这样的东西?

  
A B C
1 Apples Oranges Pears
2 Subcategory Heading ASP.Net Other
3 MVC PHP
4 Red Green Blue
Some pointless footer content
   

我最近为同样的问题为这种情况写了一个解决方案:

如何使用jQuery找到每个表格单元格的“可视位置”?

对于寻找此问题的人来说,可能是另一种解决方案

那么,最短(过度)的简化是:

 var theCell = $('td:contains("MVC")'); col = theCell.parent().children().index(theCell); row = theCell.parent().parent().children().index(theCell.parent()); 

请注意,返回的索引是从零开始的。 基本上,首先你找到感兴趣的细胞。 对于该列,您将DOM中的级别上升到

,获取所有子级(在这种情况下将是后代

s和

s)并找到感兴趣元素的位置在那一组。 对于行,在这种情况下,你爬到

,获取所有行,并找到感兴趣的

行的位置。

可以想象,表格结构的变化会改变可能的结果。 但是,如果以后以相同的方式以编程方式使用索引,则可以返回到同一单元格。 我提出这个问题是因为如果你以某种方式在UI中直观地使用索引,你可能必须变得更加棘手并且考虑到跨度,

vs no

等等……

不知道它是否比meder的答案更有效。 但是,它肯定更易于维护! 🙂

我认为最接近缩短搜索步骤会做到这样的事情:

 var counter = 0; $("#idTable tbody tr").each(function(){ var html = $(this).html(); var php = html.indexOf("PHP") > -1 ? true : false; var mvc = html.indexOf("MVC") > -1 ? true : false; if(php || mvc) { $(this).find("td").each(function(){ counter += (($(this).html()=="PHP") || ($(this).html()=="MVC")) ? 1 : 0; }); } }); 

尝试这样的事情,你明白了。 它有效,所以为什么不:)

 .stuffing { display: none; } 
 
1 2 3 4
1 4
 var tb= document.querySelector('table'); tb.rows[0].cells[3].innerHTML; //4 tb.rows[1].cells[3].innerHTML; //4 

感谢这个家伙对我问题的 回答 。