代码之家  ›  专栏  ›  技术社区  ›  tbone

如何使用表中每行的2个元素(按类)调用函数?

  •  0
  • tbone  · 技术社区  · 15 年前

    我的近似HTML:

    <div id='ComputerID'></div>
    
    <table id='gridComputerApps'>
    <tr>
      <td><div class='licenseOutput'/></td> <td><div class='AppName'>IE6</div></td>
      <td><div class='licenseOutput'/></td> <td><div class='AppName'>Firefox</div></td>
      <td><div class='licenseOutput'/></td> <td><div class='AppName'>SuperApp #2</div></td>
    </tr>
    </table>
    

    (注意,这里可能混合了其他列,所以我想选择类名)。

    因此,使用jQuery,我必须对表中的每一行执行操作。
    对于每一行,我必须将:('#ComputerID').val()、('.AppName').val()和('.licenseOutput')传递到javascript函数中,然后该函数使用ComputerID和AppName的值设置licenseOutput div的文本和颜色。

    以下措施可能有效:

        $('#gridComputerApps').children('tr').each(function() {  
            //so, do I now have access to all the ,tr> elements within #gridComputerapps?  
            //now, how do i select the subordinate elements, for each row???  
     });
    

    解决方案

    以下是最终对我有效的方法:

        $('#gridComputerApps tr').each(function() {
            var networkUserID = $("#PrimaryUserNetworkID").text();
            var appName = $(this).find(".AppName").text();
            var licenseOutputCell = $(this).find(".licenseOutput");
            if (appName != '') CheckAppSecForUser(licenseOutputCell, appName, networkUserID);
        });
    

    :
    据我所知,在asp边界字段上设置ControlStyle CssClass=“AppName”是无用的,并且类名称永远不会输出到html。
    相反,我必须创建一个模板字段,并将boundfield包装在一个div中,如下所示:

    <asp:TemplateField HeaderText="Application Name" Visible="True" HeaderStyle-Width="15%" ItemStyle-VerticalAlign="Top">
                                <ItemTemplate><div class="xxxAppName"><%#Eval("Application.NormalizedAppName")%></div></ItemTemplate>
                            </asp:TemplateField>
    
    4 回复  |  直到 15 年前
        1
  •  2
  •   richsage    15 年前

    怎么样:

    var computerID = $("#ComputerID").text();
    
    $('#gridComputerApps').children('tr').each(function() {
      var appName = $(this).find(".AppName").text();
      var licenseOutput = $(this).find(".licenseOutput").text();
    
      // do something with them
      yourFunc(computerID, appName, licenseOutput);
    });
    

    这样行吗?

        2
  •  1
  •   Russ Cam    15 年前

    使用jQuery遍历DOM有许多不同的方法。我建议尽可能具体地与您的选择者联系,从那里开始工作。以下是一些让你思考的想法

    $('#gridComputerApps').children('tr').each(function() {  
        var $tr = $(this);
    
        // all td elements in the row.
        $tr.children('td'); 
    
        // you could use position to get the first td
        // this is the tr element in this case(!)
        var tdFirst = $('td:first', this);
    
        // you could get the next td like so
        // nextAll() will get the next td, next() will only get the next sibling
        tdFirst.nextAll('td');
    
        // get the 3rd td element.
        $tr.children('td').get(2); 
    
        // get the 3rd td element as a jQuery object
        $tr.children('td').eq(2);
    
    });
    
        3
  •  0
  •   brettkelly    15 年前
    $("#gridComputerApps").children("tr").each(function(){
        $(this).children(".licenseOutput").each(function(){
            // do stuff with licenseOutput 
        });
        $(this).children(".AppName").each(function(){
            // do stuff with AppName
        });
    });
    

    $("#gridComputerApps").children("td").each(function(){
        // do stuff with each cell
    });
    

    这就是你想要的吗?

        4
  •  0
  •   Mottie    15 年前

    试试这个怎么样?我知道它有效,因为我测试过它:

    var cID = $('#ComputerID').text();
    
    $("#gridComputerApps").find("tr").each(function(){
     var license = $(this).find(".licenseOutput");
     var appname = $(this).find(".AppName");
    
     for (i=0;i<license.length;i++){
      yourFunction ( cID, $(license[i]).text(), $(appname[i]).text() );
     }
    });