Skip to main content
 首页 » 编程设计

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

2026年07月24日11wayfarer

我有一个现有的元素集合,如果它们与给定的选择器匹配,我想要更改它们。我想对这些项目的后代做同样的事情(递归地)。这看起来像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 

查找 span 和 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 

请您参考如下方法:

上下文用于提供一个元素或元素集合来查看内部,即这些元素的后代。它不像 .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