0

我正在尝试编写一个选择器,该选择器必须同时涵盖ultableselect和 selects litr并且options在单个选择器中。

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

// 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();
}

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

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

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!

4

3 回答 3

1

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

$('> li, > option, > tr, > tbody > tr', el);
于 2013-06-15T16:07:04.440 回答
1

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

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

为避免嵌套 TR,您甚至可以这样做:

var items = el.find(' > li, > option, > tbody > tr, > tbody > th');
于 2013-06-15T16:17:52.850 回答
0

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

于 2013-06-15T16:21:52.493 回答