我有一个现有的元素集合,如果它们匹配给定的选择器我想要更改.我想对这些项目的后代(递归)做同样的事情.这看起来像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
解决方法
上下文用于提供要在其中查看的元素或元素集合,这意味着这些元素的后代.它不像.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