使用具有特定值的单元格查找行

时间:2014-02-28 11:30:33

标签: javascript jquery

我必须标记表中的所有行(稍后更改代码以删除行)。

表结构如下:

<table class="table table-striped table-condensed" id="buckettable">
            <thead>
                ...cut out
            </thead>
            <tbody>
                <tr class="success">
                    <td><input class="fld-bucketno" type="checkbox" name="bucket" value="158bf61f-8f66-4dee-9ff6-b9d1f6d4b840" /></td>
                    <td class="text-right">
                        <a class="bucketNo" href="/Sim/Staging/1212">1212</a>
                    </td>

我感兴趣的是td中锚点的值 - 倒数第二行。

我得到一个要删除的id的json列表。首先我标记它们,然后更改代码以删除它们。这至少就是这个想法。请注意 - 我知道很多编程,但Javascript对我来说是一块未知的土地;)

到目前为止我的代码是:

success: function (resp) {
                var table = $('#buckettable').find('tbody')[0];

                var length = resp.length;
                for (var i = 0; i < length; i++) {
                    var bucketNo = resp[i];
                    var rows = table.children.length;
                    for (var j = 0; j < rows; j++) {
                        var row = table.children[j];
                        var bucket = row.find('.bucketNo').text();
                        if (bucket == bucketNo) {
                            alert(bucket);
                        }
                    }
                }
                $('#cleanup').modal('hide');

我无法过滤行。我对任何明智的其他方法持开放态度 - 希望它能教会我很多。

在上面的代码中,我设法获取行......但是然后find('。bucketNo')失败,并且异常认为Object#没有找到方法....我觉得这很有趣因为我使用它早先的表格。指向文档的指针非常受欢迎,特别是除了答案之外。

如果有更好的方法可以告诉我。我被告知按ID搜索更快(显然)但不知何故我不确定 - 我应该在每一行设置编码ID(bucket-xxx,xxx是数字)吗?

3 个答案:

答案 0 :(得分:2)

有一种更简单的方法可以做到这一点。

var targetBucketNo = 1212;
$('#buckettable a.bucketNo')
  .filter(function(item) {
    return item.text() == targetBuvketNo;
  })
  .parent()
  .remove();

更详细地解释。以下内容将获取#buckettable表中包含bucketNo类的锚点。

$('#buckettable a.bucketNo')

过滤器将过滤具有目标桶号

的结果
.filter(function(item) {
    return item.text() == targetBuvketNo;
 })

删除将删除元素

.remove();

如果您想要添加课程,可以将.remove()替换为.addClass('your-class-name')。这会将其添加到td元素,因此您应该在.parent()之前添加addClass

答案 1 :(得分:1)

您正在访问原生Javascript children,因此find()不是函数。但是,您可以使用jQuery过滤器方法跳过许多本机函数:

var $aTag = $('#buckettable').find('tbody td a.bucketNo').filter(function() {
    return $(this).text() == bucketNo
});
alert($aTag.text());

答案 2 :(得分:1)

您还可以使用“bucketNo”类循环所有链接,然后查看ID是否在您的数组中。在此之后获取包含TR并删除它或添加类或其他内容:

var resp = [2323,5656]

$('a.bucketNo').each(function() {
    if( resp.indexOf( parseInt($(this).text()) ) != -1 )
        $(this).closest('tr').addClass('del');
});

http://jsfiddle.net/44cEt/