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

当td元素包含br元素时,jquery选择不起作用

  •  2
  • rjzii  · 技术社区  · 15 年前

    使用一些jquery代码遇到了一些问题,但本质上,我有一个表,在第一列中可能包含或不包含br元素。当没有br元素时,以下代码可以正常工作,并返回一个值。但是,当存在BR元素时,代码值将返回大多数列的任何值。知道会发生什么吗?

    下面的jquery对于第一行(“row-19”)正确工作,并将显示每个元素的值;但是对于第二行(“row-21”),只显示第一列和最后一列的值。在生产环境中,我们使用此代码根据需要更新或获取给定td元素中的值,因此遍历列不是首选选项。

    JQuery

    alert($('#Row-' + id + ' :nth-child(' + ndx + ')').html());
    

    XHTML代码

    <tr id="Row-19">
        <td>Value</td>
        <td>Value</td>
        <td>Value</td>
        <td>Value</td>
        <td>1</td>
        <td>2</td>
        <td>
            <a href="#" title="Edit" onclick="edit('19');">[Edit]</a>&nbsp;
            <a href="#" title="Delete" onclick="delete('19');">[Delete]</a>
        </td>
    </tr>
    <tr id="Row-21">
        <td>
            Value<br />
            Value<br />
            Value<br />
            Value<br />
            Value<br />
        </td>
        <td>Value</td>
        <td>Value</td>
        <td>Value</td>
        <td>3</td>
        <td>4</td>
        <td>
            <a href="#" title="Edit" onclick="edit('21');">[Edit]</a>&nbsp;
            <a href="#" title="Delete" onclick="delete('21');">[Delete]</a>
        </td>
    </tr>
    
    1 回复  |  直到 15 年前
        1
  •  2
  •   Sampson    15 年前

    对我来说很好: http://jsbin.com/awame3

    $("a[title='Edit']").click(function(e){ 
      e.preventDefault();  
      $(this).parent().prevAll("td").each(function(){ 
        alert($(this).html()); 
      }); 
    }); 
    

    更新特定单元格

    $("a[title='Edit']").click(function(e){
      e.preventDefault();
      var cell = $(this).closest("tr").find("td:eq(0)").html("new values");
      alert($(cell).html());
    });
    

    您可以将一个类应用于需要操作的任何单元格,并完全放弃对索引的寻址:

    $(this).parent().siblings("td.editMe").html("new values");
    

    获取单元格2-5

    使用过滤器,您可以得到单元格2到5:

    $(this).closest("tr").children("td:gt(0)").filter(":lt(5)");