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

这是jquery如何处理子选择器的错误吗?

  •  6
  • Anurag  · 技术社区  · 15 年前

    jquery如何处理子选择器中是否存在错误,或者我是否遗漏了一些明显的问题?当孩子不是别的时候,我不能让它工作。 * .

    下面是我正在运行的jquery选择器:

    $("#myTable > tr").each(function() {
        // do somthing }
    );
    

    表结构为:

    <table id="myTable">
        <tr>
            <td><button>someButton</button></td>
            <td><textarea>...</textarea></td>
        </tr>
    </table>
    

    没有与上述选择器匹配的元素 #myTable > tr . 但是下面列出的两个选择器工作正常。

    $("#myTable tr") // search all descendants for tr
    

    或使用通配符匹配子项:

    $("#myTable > *") // search all child elements
    

    有什么问题吗?

    谢谢你们的快速回答!很遗憾,只能选择一个。

    3 回复  |  直到 15 年前
        1
  •  10
  •   Doug Neiner    15 年前

    因为火狐会自动添加 tbody 你周围的元素 tr 元素(如果未提供)。你真的不能用 table > tr .

    你有:

    <table id="myTable">
        <tr>
            <td><button>someButton</button></td>
            <td><textarea>...</textarea></td>
        </tr>
    </table>
    

    但火狐看到了这一点:

    <table id="myTable">
      <tbody>
        <tr>
            <td><button>someButton</button></td>
            <td><textarea>...</textarea></td>
        </tr>
      </tbody>
    </table>
    

    其他元素也会起作用:

    <div>
      <strong>Hi</strong>
    </div>
    

    以及选择器:

    alert( $("div > strong").text() ); // Alerts "Hi"
    
        2
  •  5
  •   cletus    15 年前

    有一种含蓄 <tbody> 元素添加了含义,而不是:

    <table id="myTable">
      <tr>
        <td><button>someButton</button></td>
        <td><textarea>...</textarea></td>
      </tr>
    </table>
    

    DOM实际上包含:

    <table id="myTable">
    <tbody>
      <tr>
        <td><button>someButton</button></td>
        <td><textarea>...</textarea></td>
      </tr>
    </tbody>
    </table>
    

    所以把它改为:

    $("#mytable > tbody > tr");
    

    使用 <t车身> , <thead> <tfoot> 表中的元素是一个很好的习惯。

        3
  •  1
  •   andy    15 年前

    是的,道格完全正确。为了补充他的答案,也许您知道,或者不知道,但是请记住jquery遍历DOM,而不是您发送给浏览器的HTML“文本”。

    DOM是浏览器对您发送的HTML的解释。