【问题标题】:Can I use jquery children() to select children of a child element?我可以使用 jquery children() 来选择子元素的子元素吗?
【发布时间】:2013-06-15 15:51:33
【问题描述】:

我正在尝试编写一个选择器,它必须同时覆盖 ultableselect,并在单个选择器中选择 litroptions

例如,由于我不能排除在表格单元格中定义的列表,因此我正在尝试这样:

// el can either be a list, table, select
var items = el.children("li, option, tbody tr, tbody th");

但看起来我无法通过选择来访问表格行:

var items = "table".children("tbody tr");

问题:
有没有办法使用children() 方法并选择“孩子的孩子”?如果没有,有没有更好的方法使用 jQuery?

谢谢!

编辑
我正在寻找一种简短的方法来做到这一点:

if (el.get(0).tagName === "TABLE") {
   items = el.find("tbody tr");
} else if ( el.get(0).tagName === "UL") {
   items = el.children();
} else if ( el.get(0).tagName === "SELECT") {
   items = el.children();
}

在单行中这样做会很好,但我需要有一种方法可以在我的children() 呼叫中访问tbody tr

回答
这是我的最终选择器:

items = el.find("> li, > option, tbody tr, tbody th, ui-controlgroup-controls ui-btn");

到目前为止,它给了我正确的元素,所以当el

table > returns: tr, tr, tr, tr
list > returns: li, li, li
select > returns: option, option, option
controlgroup > returns a.ui-btn, a.ui-btn, div.ui-btn

谢谢@adeneo!

【问题讨论】:

  • 您是说希望能够深入到 select、table 或 list 中最深的 lis、trs 或选项,还是只想在任何级别找到它们,只要上下文父级是基本的三个 el var 元素之一?
  • 不。我不需要最深的。查看我的编辑。

标签: javascript jquery jquery-selectors children


【解决方案1】:

我猜你只想要直接的孩子,但如果它是一张桌子,你想要所有的TR's。您可以使用直接子选择器>find(),这将仅匹配el 的直接子元素LIOPTION

var items = el.find(' > li, > option, tbody tr, tbody th');

为了避免嵌套的 TR,你甚至可以这样做:

var items = el.find(' > li, > option, > tbody > tr, > tbody > th');

【讨论】:

    【解决方案2】:

    因此,您只希望 el 的第一个后代是我现在假设的 TR、LI 或 OPTION。我不确定浏览器变体在 tablebody 上的位置,所以我可能会安全地使用它:

    $('> li, > option, > tr, > tbody > tr', el);
    

    【讨论】:

    • 这给了我所有的表格单元格:-)
    • 这就是我所期望的。我以为你想要在表格、列表和选择中找到所有 lis、options 和 trs 的子项。如果您想要 lis 选项和 trs,只需丢失 .children()。或者您的意思是仅当您知道 options 和 lis 中有您想要的东西时才使用 TD?
    • 我有 ultableselect 以及如何选择他们的 litroptions。问题是 tbodytr 是桌子的孩子。我可以使用find(),但我不知道litr 里面是什么,所以如果有一个包含列表项的嵌套列表,我不想让嵌套的li 最终出现在我的@ 中987654334@.
    • 啊...好吧。所以只匹配第一个后代。
    • 仅供参考,第二个参数中的 el 本质上是 find 的简写。
    【解决方案3】:

    你应该检查 filter() el.filter("tbody")

    【讨论】:

    • 我知道我可以 filter() 但这也会踢出 lioption
    猜你喜欢
    • 2010-10-24
    • 2023-04-09
    • 1970-01-01
    • 2011-10-17
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 2019-08-09
    相关资源
    最近更新 更多