jQuery用class调用td

时间:2015-04-12 16:39:45

标签: javascript jquery html

我有一个脚本,显示从API检索的数据。

$(document).ready(function() {
    var test="test";

    function display() {     
        $("#div1").append('<tr>
                           <th>A</th>
                           <th>B</th>
                           <th>C</th>
                           <th>D</th>
                           </tr>');

        $.post(url, {test:test}, function(data){
            for(var i=0; i<data.length; i++){
                $("#div1").append('<tr><td>' + "Data 1" + '</td><td>' + 
                                               "Data 2" + '</td><td>' + 
                                               "Data 3" + '</td><td class="data4">' + 
                                               "Data 4" + '</td><td class="data5">' + 
                                               "Data 5" + '</td></tr>');
            }   
        });

        $("td:nth-child(3)").hide();
        $('td:nth-child(5)').live('mouseenter',function(){
            alert("Hello");         
        });
    }

    display();
});

以下行无效:

$("td:nth-child(3)").hide();

但是,以下代码正在运行:

$('td:nth-child(5)').live('mouseenter',function(){
    alert("Hello");         
});

我尝试了几种方法,例如:

$(".data4").hide();
$("td.data4").hide();
$("table tbody tr td.data4").hide();

但没有一个有用。有人能帮助我吗?

4 个答案:

答案 0 :(得分:1)

试试这个

$('#div1').find('td:nth-child(3)').hide();

编辑: 您要隐藏的部分是通过异步调用创建的,因此在您尝试隐藏它时可能尚未创建它。

尝试将其隐藏在回调范围内,这样,它必须在您尝试隐藏它之前创建。那是在$('div1').append()

之后

进一步解释: $ .post()是一个异步函数,它意味着其余代码继续执行而不等待它(函数调用)来完成它的执行。这就是为什么你无法隐藏那个部分,因为当时还没有创建它。  由于您希望对结果执行某些操作,因此您需要等待该函数完成执行。

$ .post()函数中的代码部分

$.post($url, data, function(data)  { 
    // this part will execute when the asynchronous function completes 
});

称为回调函数。该部分在异步调用完成后执行,然后创建了要隐藏的数据。

答案 1 :(得分:0)

如果你知道表id或类,那么试试这个:

$('#tableID td:nth-child(3)').hide();// you can use it by table class also by removing # to .

答案 2 :(得分:0)

您应该使用deferreds,这样可以确保在您尝试隐藏其中一个组件之前完全构建表格,并且它将为您的代码提供更好的结构:

var getdata = function() { 
      var r = $.Deferred();

       $("#div1").append('<tr>
                   <th>A</th>
                   <th>B</th>
                   <th>C</th>
                   <th>D</th>
                   </tr>');
       $.post(url, {test:test}, function(data){
         for(var i=0; i<data.length; i++){
                $("#div1").append('<tr><td>' + "Data 1" + '</td><td>' + 
                                               "Data 2" + '</td><td>' + 
                                               "Data 3" + '</td><td class="data4">' + 
                                               "Data 4" + '</td><td class="data5">' + 
                                               "Data 5" + '</td></tr>');
         }   
      }); 

      setTimeout(function () { r.resolve();}, 2500);

      // return the deferred object
      return r;
};

var display = function() { 
      $("td:nth-child(3)").hide();
      $('td:nth-child(5)').live('mouseenter',function(){
                alert("Hello");         
      }) 
};

getdata().done(display);

答案 3 :(得分:0)

试试这个。

由于您使用的是ajax,因此必须等待响应。将代码移到回调函数中。

$.post(url, {test:test}, function(data){
    for(var i=0; i<data.length; i++){

      $("#div1").append('<tr><td>' + "Data 1" + '</td><td>' + 
                         "Data 2" + '</td><td>' + 
                        "Data 3" + '</td><td class="data4">' + 
                        "Data 4" + '</td><td class="data5">' + 
                        "Data 5" + '</td></tr>');
    }  
    $("td:nth-child(3)").hide();
  });