结合jQuery的parent()和add()一起作用于element和parent

Combining jQuery's parent() and add() to act on element and parent together

有没有办法使用 jQuery 的 parent()add(),同时作用于一个元素及其父元素?

我正在尝试从存储的元素及其父元素中删除 class。当前解决方案:

$elem.removeClass('foo').parent().removeClass('foo');

它看起来不是特别干(不要重复自己)。有没有更优雅的解决方案?

$elem.add('#parentId').removeClass('foo');

...应该提供相同的功能,但搜索 DOM 的性能成本可能比重复 removeClass().

高得多

一种可能的方法是使用 addBack() 方法,自 jQuery 1.8:

起可用
$elem.parent().addBack().removeClass('foo');

引用 the docs:

jQuery objects maintain an internal stack that keeps track of changes to the matched set of elements. When one of the DOM traversal methods is called, the new set of elements is pushed onto the stack. If the previous set of elements is desired as well, .addBack() can help.

请注意,andSelf() 方法的早期版本中提供了类似的功能;自 1.8 起已弃用。

您可以使用 .addBack()。这是一种在当前对象中添加前一个 jQuery 对象的方法。

您的代码应该是这样的:

$elem.parent().addBack().removeClass('foo');

只是为了提出一个使用 .add() 而不是 .addBack() 的替代解决方案,您也可以这样做:

$elem.add($elem.parent()).removeClass('foo');