如何简化这个jQuery表达式?

时间:2010-07-14 22:45:53

标签: jquery

$country.parent().parent().next().children('td').children('.province-select')

基本上我有一些看起来像这样的HTML:

<table>
    <tr>
        <th>country</th>
        <td><select name="country"/></td>
    </tr>
    <tr>
        <th>province</th>
        <td><select class="province-select"/></td>
    </tr>
</table>

一旦我抓住了国家select,我需要找到下一个.province-select。如果它对于微妙的HTML更改更加健壮,那么会很好

AFAIK next()只找到兄弟姐妹,closest()只遍历DOM树。


我在同一张桌子上都有一些。这就是我使用所有这个父/下一个垃圾的原因。我不想使用ID,因为......好吧,那么脚本只适用于一个特定的国家/省份对;我需要它来运行所有这些;因此,我需要为国家/地区字段找到相应的省字段。

5 个答案:

答案 0 :(得分:3)

例如:

$contry.closest('tr').next('tr').find('> td > .province-select')

答案 1 :(得分:2)

你可以尝试

$country.parents( 'tr' ).next().find('.province-select')

答案 2 :(得分:2)

下面是丑陋的,但会考虑“微妙”的变化,例如在两个选项之间添加额外的tr,它还会考虑多个国家/省份的选择元素。

//cache closest tr so we can get its index and use it as the base for the next traversal
var $closesttr = $country.closest('tr');

//search the tbody  for the first instance of an element that has the class
// province-select and is after the tablerow that contains the current country

$closesttr.parent()
          .find('tr:gt(' + $closesttr.index() + ') .province-select:first');

答案 3 :(得分:1)

我可能会选择:

$country.closest('table').find('.province-select');

答案 4 :(得分:1)

如果您可以为您的选择添加ID

$('#country')$('#province-select')将获取您的元素,假设您的HTML不在某种转发器/列表中

修改
嗯,在这种情况下你试过equivalent of GetElementsByName吗?