使用jquery获取HTML表中特定行的直接几行的问题

时间:2011-08-04 17:04:18

标签: jquery asp.net repeater validation

我在我的asp.net网站上使用嵌套转发器。使用这些转发器,我正在以表格形式显示产品列表(表放在外部转发器中)。在外部(顶层)中继器中,我有主要产品,在内部中继器中,我有一些与外部中继器中的产品相关的选项(如果有的话)。在下订单时,用户只允许选择2个与任何产品相关的选项。为了进行此验证,我使用的是具有以下客户端js函数的自定义验证器。

function CountChosenAdditionalOptions(source, arguments) {

        $('table.productslist tbody tr.productTextAlign').each(function () {
            var count = 0;
            $('table. productslist tbody tr.additionalOptions').each(function () {
                var chooseAdditionalOptionsCheckBoxtd = $(this).children("td.chooseOptionCheckBox");
                var additionalOptionChosen = $(chooseAdditionalOptionsCheckBoxtd).children("input[type=checkbox]")[0].checked;
                if (additionalOptionChosen) {
                    count = count + 1;
                }
            });
            if (count > 2) {
                arguments.IsValid = false;
                return false;
            }
        });       
    }

由转发器呈现的示例HTML如下

<table class= “productslist”>
<tbody>
<tr>....</tr>
<tr>....</tr>
<tr class=”productTextAlign”>
.....
.....
</tr>
<tr class=”additionalOptions”>.....</tr>
<tr class=”additionalOptions”>.....</tr>

<tr class=”additionalOptions”>.....</tr>

<tr class=”additionalOptions”>.....</tr>

<tr class=”additionalOptions”>.....</tr>
<tr>...</tr>

<tr class=”productTextAlign”></tr>

<tr class=”additionalOptions”>.....</tr>

<tr class=”additionalOptions”>.....</tr>

<tr class=”additionalOptions”>.....</tr>

<tr class=”additionalOptions”>.....</tr>
</tbody>
</table>

验证背后的想法是迭代外部转发器,并对其中的每个项目检查内部转发器中选择的选项数量。但是转发器只是呈现为表格,每个产品的js功能如上所示行,它试图找到附加选项行并递增计数,而不管附加选项行是否与该特定产品相关联。

有人可以帮助更新js功能以识别与特定产品相关的选项,并增加指示所选选项数量的计数吗?

更新

function CountChosenAdditionalOptions(source, arguments) {

        $('table.productslist tbody tr.productTextAlign').each(function () {
            var count = 0; $(this).nextUntil("tr.productTextAlign").each(function () {
                var chooseAdditionalOptionsCheckBoxtd = $(this).children("td.chooseOptionCheckBox");
                var additionalOptionChosen = $(chooseAdditionalOptionsCheckBoxtd).children("input[type=checkbox]")[0].checked;
                if (additionalOptionChosen) {
                    count = count + 1;
                }
            });
            if (count > 2) {
                arguments.IsValid = false;
                return false;
            }
        });       
    }

1 个答案:

答案 0 :(得分:0)

我想你想要nextUntil

http://api.jquery.com/nextUntil/

$('table.productslist tbody tr.productTextAlign').each(function () {

    $(this).nextUntil("tr.productTextAlign").each(function () {

    }
}

第二个循环将在当前productTextAlign之后的每一行开始运行,并一直持续到找到另一个productTextAlign