使用jQuery时如何在搜索空间中包含上下文元素(selector [,context])

时间:2013-05-15 18:25:33

标签: jquery

我有一个现有的元素集合,如果它们与给定的选择器匹配,我想要更改它们。我想对这些项目的后代(递归)做同样的事情。这似乎是jQuery( selector [, context ] )的功能。但是,结果集不包括父元素。我也想查询它们。这可以用一个命令完成吗?

例如,

var els = $('<div foo="bar">')
$("[foo]", els ); // finds nothing
els.filter("[foo]"); // finds div 

但是过滤器不会搜索后代,所以

var els = $('<div foo="bar"><span foo="foobar"></div>')
$("[foo]", els ); // finds span
els.filter("[foo]"); // finds div

找到跨度和div的最佳方法是什么?使用这两个命令?是否有单行命令可以找到它们?还是比这更好吗?

var els = $('<div foo="bar"><span foo="foobar"></div>')
var selection = $("[foo]", els ); // finds inner elements
selection = selection.add(els.filter("[foo]")); // then adds on parents that match the selector

1 个答案:

答案 0 :(得分:2)

上下文用于提供元素或元素集合,以在中显示,这意味着这些元素的后代。它不像.filter那样过滤,更像是.find

如果你想要两者,你将不得不同时使用两者:

$("[foo]", els ).add( els.filter("[foo]") );

或使用父元素。

$("[foo]", $("<div>").html(els) );

所以,没有更好的方法。

第二种方法是jQuery的.load方法如何做到这一点,但我不会更好地考虑它。

https://github.com/jquery/jquery/blob/1.9-stable/src/ajax.js#L176