0

我有以下代码生成一个表:

  <table class="table table-bordered table-striped" id="assignedvs">
      <thead>
          <tr>

              <th>VlId</th>
              <th>Name</th>
              <th>Status</th>
              <th>Voice</th>
              <th>Jumbo</th>
              <th>Mode</th>
          </tr>
      </thead>
      <tbody>

          <?php foreach ($vln as $vlndetail): ?>
              <tr>          
                     <td id='vlid'><?php echo $vlndetail['VlId'] ?></td>
              <td><?php echo $vlndetail['Name'] ?></td>
              <td><?php echo $vlndetail['Status'] ?></td>
              <td><?php echo $vlndetail['Voice'] ?></td>
              <td><?php echo $vlndetail['Jumbo'] ?></td>
              <td><?php echo $vlandetail['Mode'] ?></td>
            </tr>
          <?php endforeach ?>

我需要找到 VlId 与用户在文本框中指定的内容相匹配的行。找到此记录后,我想在特定行的模式列中获取值。

这是我到目前为止所写的:

    $('#delete').live('click', function()  {

                //get a count of all records. only allowed to delete if you have more than one + the header.
                var reccount = $('#assignedvs tr').length;

                if (reccount > 2)
                {
                    //loop through the table
                $('#assignedvs tr').each(function() {

                    var temp = $(this).find(".vlid").html(); 
                    console.log(temp);  
                                    if (temp == $('#uservalue').val){
                                          //grab mode column
                                     }
                });
                }
                else
                {
                    alert("error: must have at least 1 record.");
                }



    });  

问题 - 我必须引用 vlid 列的代码不正确。它总是向控制台打印一个空值。你能告诉我我做错了什么吗?谢谢。

编辑 1

我将我的 id 更改为一个类,并将我的 jquery 更改回我拥有的原始代码。它正在工作 - 除了我认为它包含 header 的事实。我有 4 行 + 标题。当我检查控制台结果时,第一个打印输出始终为 NULL,然后是 4 条记录的正确值。如何让它忽略标题?

4

5 回答 5

2

那是因为你是finding by className,而不是 by id。要查找 by id,请改用以下内容:

$(this).find("#vlid").html();

但是,由于ids 在整个文档中应该是唯一的,因此更好的解决方案是维护您当前的代码,而不是使用<td id='vlid'>,而是使用<td class='vlid'>

另请注意,这val()是一个函数。因此,要获取给定输入的值,您应该使用$('#uservalue').val().

编辑:要排除标题,请使用$('#assignedvs tbody tr')选择器。这样,您只会获得 的后代行tbody,从而忽略标题行,这些行来自thead.

于 2012-09-26T19:50:21.227 回答
0

几个变化:

  1. <?php echo $vlndetail['VlId']; //missing semi-colon ?>
  2. var temp = $(this).find("#vlid").html();vlid 是一个 id
于 2012-09-26T19:50:19.013 回答
0

您可以通过http://datatables.net上的数据表轻松完成此操作

于 2012-09-26T19:51:31.920 回答
0
var temp = $(this).find("#vlid").html(); // .vlid (by class) changed to #vlid (by id)
于 2012-09-26T19:51:31.947 回答
0

一个更简单的解决方案。

使用vlId为每一行分配一个 ID (可能预先tr_添加到 ID 以避免重复)。

为每个数据单元分配一个具有列名的类。

像这样:

      <?php foreach ($vln as $vlndetail): ?>
          <tr id='tr_<?php echo $vlndetail['VlId'] // set the ID ?>'>          
              <td class='vlid'><?php echo $vlndetail['VlId'] ?></td>
              <td class='Name'><?php echo $vlndetail['Name'] ?></td>
              <td class='Status'><?php echo $vlndetail['Status'] ?></td>
              <td class='Voice'><?php echo $vlndetail['Voice'] ?></td>
              <td class='Jumbo'><?php echo $vlndetail['Jumbo'] ?></td>
              <td class='Mode'><?php echo $vlandetail['Mode'] ?></td>
          </tr>
      <?php endforeach ?>

然后要获取所选 vlID 的名称,只需执行以下 JQUERY:

var rowID = "#tr_" + $('#uservalue').val(); // this is optional. I prefer to cache values for increased code readability.
$(rowID + " td.Mode").dostuffhere(); // this selector returns the Mode cell for the row indicated by the user

这将抓取该特定行的模式列。

于 2012-09-26T20:01:41.270 回答