Javascript 使用jQuery筛选标记
我有以下几点:Javascript 使用jQuery筛选标记,javascript,jquery,filter,svg,Javascript,Jquery,Filter,Svg,我有以下几点: <g> <rect id="1"> <text id="2"> <g> <path id="3"> </g> </g> <text id="4"> <rect id="5"> 我原以为过滤器是一个递归函数,但它似乎不起作用。还尝试: $result = $svgCollection.filter('text, rect,
<g>
<rect id="1">
<text id="2">
<g>
<path id="3">
</g>
</g>
<text id="4">
<rect id="5">
我原以为过滤器是一个递归函数,但它似乎不起作用。还尝试:
$result = $svgCollection.filter('text, rect, path');
但是没有快乐。有什么想法吗?不知道这是否是一个好的解决方案,但是:
$("g").children().unwrap();
该方法旨在实现您想要的目标:
$svgCollection.find("g > *").unwrap();
编辑:如果不希望此操作影响DOM,可以克隆集合:
var $result = $svgCollection.clone().find("g > *").unwrap().end();
或更短:
$('g').replaceWith(function() {
return $(this).contents()
});
最后一个。也许你在某个地方出错了?我需要删除变量集合中的“g”标记,而不是DOM。这本身并不能解决问题,如果我正确理解这个问题,可能我们想要得到的标记不是
@Jon的后代,这应该不是问题:只有
元素将被unwrap()
删除,其他元素将保持不变。正确的Frédéric,将有一些标记(例如在根中)不是
@FrédéricHamidi的后代:是的,但是find
会将一些元素排除在等式之外(请参见OP示例中的ids 4和ids 5)。@Jon,find()
只匹配
元素的子元素以将其展开。所有其他元素将保持原样,包括ID4
和5
。我错过什么了吗?
var $result = $svgCollection.clone().find("g > *").unwrap().end();
$('g').each(
$(this).replaceWith($(this).contents())
});
$('g').replaceWith(function() {
return $(this).contents()
});