JQuery tr:不要跳过2个类的名字

时间:2011-06-13 20:07:49

标签: jquery

我想跳过2个不同类的表中的tr。

第一个类是.gridTitleRow,第二个tr是类.gridSpan。如何在下面的语法中跳过这些?

$.each($(".gridTable tr:not(.gridTitleRow)"), function(a, b){});

已编辑我正在使用以下各项

$("#gridBtn").live("click", function (e) {
    e.preventDefault();
     var indexArraay = [];
     var flag = false;
     $.each($(".gridTable tr:not(.gridTitleRow)"), function(a, b){

            var id = $("input.idField", b).val();
            var order = $("input[id='index']", b).val();
            var active = $("input[id='activeCb']", b).attr("checked");
            var deleteRow = $("input[id='deleteCb']", b).attr("checked");

            (deleteRow == true) ? flag = true : null;

            indexArraay.push({
                "id": id,
                "index": order,
                "active": active,
                "delete": deleteRow
            })
     });

    if (flag == true)
    {
        $("#dialog:ui-dialog").dialog("destroy");

        var text = "Alert: Deleting footer Prent menu will delete all submenus and assigned pages to it.";
        $('<div title="Confirmation:">' + text + '</div>').dialog({
            height: 'auto',
            width: 350,
            modal: true,
            resizable: false,
            buttons: {
                Cancel: function () {
                    $(this).dialog("close");
                },
                Confirm: function () {
                    $(this).dialog("close");
                    ProcessGrid(indexArraay);
                    ReloadGrid();
                }
            }
        });
    }else{
        ProcessGrid(indexArraay);
        //ReloadGrid();
    }

}); //End of gridBtn

表格

<script id="gridTemplate" type="text/x-jQuery-tmpl">
    <tr class="gridRow">
        <td class="gridSpan" colspan="5">${$data[0].Title}</td>
    </tr>
    {{tmpl($data) "#cellTemplate"}}
</script>
<script id="cellTemplate" type="text/x-jQuery-tmpl">
    <tr class="gridRow">
        <td class="cellTd ">
            <input type="checkbox" id="deleteCb" />
            <input type="hidden" id="Id_ + ${num}" class="idField" value="${Id}" />
        </td>
        <td class="cellTd">
            <input id="index" name="index" class="numberField" type="text" value="${IndexOrder}" />
        </td>
        <td class="cellTd">${DisplayName}</td>
        <td class="cellTd ">${UrlName}</td>
        <td class="cellTd ">
            <input type="checkbox" id="activeCb" {{if Active}} checked{{/if}} />
        </td>
    </tr>
</script>   

<span class="instructions">Only numeric value is allowed in IndexOrder textbox.</span>
<div class="gridDiv">
<table class="gridTable" cellspacing="0" cellpadding="0">
    <tbody>
        <tr class="gridTitleRow">
            <td class="iconLink width36">Delete</td>
            <td class="iconLink width60">Sort Order</td>
            <td class="iconLink widthAuto">Display Name</td>
            <td class="iconLink widthAuto">Url Name</td>
            <td class="iconLink widthAuto">Active</td>
        </tr>


    </tbody>
</table>

2 个答案:

答案 0 :(得分:6)

$.each($(".gridTable tr:not(.gridTitleRow, .gridSpan)"), function(a, b){});

在选择器中,“,”就像“或”。 等等 - 就像“和”,但因为你的选择器在“not()”子句中,所以“不是这一个而不是那个”,就像“不是(这一个或那个)” 。我想我可能会说一点: - )

编辑 - 我没有说服自己再次“或”。需要咖啡。

再次编辑 - 有几件事:

  • 当第一个对象已经是jQuery对象时,没有理由调用“$ .each()”:

    $(".gridTable tr:not(.gridTitleRow, .gridSpan)").each(function(i, elem) {
    
  • 按“id”值搜索时,没有理由使用属性选择器,也没有理由使用上下文,因为“id”值必须是唯一的。使用“#id”:

    var order = $('#index');
    
  • 请再次注意,无效对页面上的多个元素使用相同的“id”值。如果您在许多表行上使用相同的“id”,那就错了,您将不得不更改它。

  • jQuery团队已弃用表单$(selector, base),而更喜欢表单$(base).find(selector)。在内部,库总是执行转换,因此您可以省去它的麻烦:

    var deleteRow = $(b).find('#deleteCb');
    
  • 根本不清楚“旗帜”应该做什么,但你可能忘了宣布它。也许这是一个全局变量。

  • 你的评论说“空tr传递未定义”,但我不知道这意味着什么。如果选择器没有找到<tr>个元素,那么“each”循环就不会发生。如果您描述的是未定义的确切内容,则可以提供帮助。

答案 1 :(得分:1)

我可能会将其从选择器中删除,以便保留有效的querySelectorAll选择器:

$(".gridTable tr").not('.gridTitleRow,.gridSpan').each( function(a, b){});

如果只有一个使用qsa过滤掉的类名,则选择器对:not()有效,但有两个,它变为无效,默认为Sizzle基于javascript的引擎。< / p>