jquery如何在表中获取值

时间:2012-09-26 19:47:47

标签: php jquery html

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

  <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列的代码不正确。它总是在控制台上打印一个null。 你能告诉我我做错了什么吗? 感谢。

编辑1

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

5 个答案:

答案 0 :(得分:2)

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

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

但是,因为id在整个文档中应该是唯一的,更好的解决方案是维护当前代码,而不是使用<td id='vlid'>,使用{ {1}}。

另请注意<td class='vlid'>是一个函数。因此,要获取给定输入的值,您应该使用val()

编辑:要排除标题,请使用$('#uservalue').val()选择器。这样,您只能获得$('#assignedvs tbody tr')后代的行,从而忽略从tbody下降的标题行。

答案 1 :(得分:0)

一些变化:

  1. <?php echo $vlndetail['VlId']; //missing semi-colon ?>
  2. var temp = $(this).find("#vlid").html(); vlid是一个id

答案 2 :(得分:0)

您可以通过http://datatables.net

处的数据表轻松完成此操作

答案 3 :(得分:0)

var temp = $(this).find("#vlid").html(); // .vlid (by class) changed to #vlid (by id)

答案 4 :(得分:0)

更简单的解决方案。

使用 vlId 为每一行分配一个ID(可能在ID前加tr_以避免重复)。

将具有列名的类分配给每个datacell。

像这样:

      <?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

这将获取该特定行的Mode列。