问题 在jQuery中将子选择器与上下文节点一起使用的新方法是什么?


在里面 子选择器的jQuery文档 我看到了这个说明:

注意: $("> elem", context) 选择器将在以后的版本中弃用。因此不鼓励使用其替代选择器。

我一直使用这种模式,通常是这样的:

$nodes.find('> children[something=morecomplicated] > somethingelse');

但是,我不明白他们所指的“替代选择者”是什么。 编写遍历上下文节点的直接子节点的选择器的正确方法是什么?  作为奖励,任何人都可以解释 为什么 这是折旧的吗?每个人都给予的所有选择似乎都令人惊讶 丑陋

这是一些事情  工作:

// does not guarantee that '.child' is an immediate child
$nodes.find('.child > .grandchild');

// this will return empty array in recent jQuery
// and will return full list of children in older jQuery
$nodes.children('.child > .grandchild');

// Anything like this which forces you to split up the selector.
// This is ugly and inconsistent with usual selector ease-of-use,
// and is a non-trivial conversion for long or complex selectors.
$nodes.children('.child').children('.grandchild');
// After all, no one would ever recommend
$nodes.find('.this').children('.that');
// instead of
$nodes.find('.this > .that');

1400
2017-12-06 20:49


起源

有关其他信息,请参见此处 stackoverflow.com/questions/7833558/child-selector-deprecated - Jonathan Rich
啊,即使经过努力寻找,我也没有看到这个问题。但是,没有一个答案真的非常令人满意。 - Francis Avila
你肯定提出了一个好点。但是,除非你发现我目前还没有发现的东西,否则我认为链接儿童电话和拆分选择器可能是你唯一的选择。 - Dan
太糟糕了。有没有人知道折旧使用初始'>'的理由?我可能想把战斗带到jQuery。 - Francis Avila
等等,他们当然 没有 不赞成使用初始的“>”。正如我在回答中所说:他们刚刚弃用了逗号,后跟上下文选择器。所以这 jsfiddle.net/DwUTw 仍然非常好。我想我们都有点困惑。 - Dan


答案:


他们说的原因是:

注意: $("> elem", context) 选择器将在以后的版本中弃用。因此不鼓励使用其替代选择器。

是由于逗号后跟选择器中的上下文。例如。 $("> elem") 没关系, $("> elem", context) 将被弃用。

$("> elem", context) 是相同的 $(context + "> elem")

获得子孙的正确方法是

$("elem").children('.child').children('.grandchild');

要么

context.children('.child').children('.grandchild');

要么

context.find('> .child > .grandchild');

14
2017-12-06 20:54



建议的替代方案没有错,但我必须评论给出的推理。整点 > elem 是它假设某种背景。 $("> elem") 不会没事,事实上,这将毫无意义,因为究竟是什么 elem 与...有关?和 $(context + "> elem") 只有 context 是一个选择器字符串。 - BoltClock♦
实际上,我不完全确定它们是否真的要说不推荐使用带有相对选择器的context参数,或者不推荐使用相对选择器语法本身。更糟糕的是,自jQuery的文档完全重新设计以来,弃用通知几乎消失了。由于这个原因,我几乎想要创建一个新问题。 - BoltClock♦