2017-05-12 226 views
0

我最近不得不编写代码来搜索与标题相关联的字段值的页面。 HTML结构是以下形式:jQuery选择器下一个兄弟的最后一个元素

<table><tr> 
 
    ...etc... 
 
    <td><div><span>Type of Fruit:</span></div></td> 
 
    <td><span><div><span><div>Orange</div></span></div></span></td> 
 
    ...etc... 
 
    </tr></table>

我解决了以下jQuery的问题:

var strFruitType = $('span').filter(function(){ 
 
      return $(this).text() === 'Type of Fruit:'; 
 
    }).closest('td').next().find(':last').text().trim(); 
 

 
    //Evaluate Fruit Type. 
 
    switch(strFruitType) { 
 
    ...etc...

这是最直接的或有效的方法来找到下一个兄弟姐妹的最后一个元素?

+0

你有过HTML控件? –

+0

不,我无法控制HTML。我的任务是确定与“水果种类:”(显然,不是真正的标题或数据)标题相关的价值并对其采取行动。页面上还有其他标题/值组合,我可能也需要评估。 –

回答

3

如果你没有HTML的控制权,你有什么看起来不错。只是一对夫妇的事情:

如果寻找那个包含“水果的类型:”一个字符串是OK,你可以这样做:

$('span:contains("Type of Fruit:")').closest('td').next().find(':last').text().trim(); 

,你甚至可以缩短到:

$('td:contains("Type of Fruit:")').next().find(':last').text().trim(); 

而且,我不知道如何简化您的例子是,但它看起来像您可能使用:last找到同级td最深元素元件。但:last确实找到了最后一个直接的孩子。所以,如果你td可能不止一个直接子是这样的:

<td> 
    <span><div><span><div>Orange</div></span></div></span> 
    <span><div><span><div>Apple</div></span></div></span> 
</td> 

你最终与“苹果”,但它是因为:last发现第二span直接td内。所以如果你的td只会有一个直接的孩子,那么你不需要:last

这给我们留下了:

$('td:contains("Type of Fruit:")').next().text().trim();