可以使用matchedset.find(selector)/ matchedset.parents(selector)来获取由选择器过滤的当前匹配集的后代/祖先,但是不包括匹配集本身(如果它恰好也匹配选择器).是否有更好的(更简洁和/或更快)的方式来获得它
matchedset.find(selector).add(matchedset.filter(selector))
Run Code Online (Sandbox Code Playgroud)
和父母的相应()?
有可能使用jQuery来选择元素的祖先吗?
标记:
<div id="ancestor-1">
<div>
<a href="#" class="click-me">Click me</a>
</div>
</div>
<div id="ancestor-2">
<div>
<a href="#" class="click-me">Click me</a>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
脚本:
$(".click-me").click(function(){
// var ancestorId = ???;
alert(ancestorId)
});
Run Code Online (Sandbox Code Playgroud) 检查2个树节点是否相关(即祖先 - 后代)
而已.我将在下面讨论我的解决方案(方法).如果你想先考虑自己,请停止.
对于预处理,我决定做一个预订(先递归遍历root,然后是子),并给每个节点一个标签.
让我详细解释标签.每个标签将由逗号分隔的自然数组成,如"1,2,1,4,5" - 此序列的长度等于(节点的深度+ 1).例如,根的标签是"1",root的子节点将具有标签"1,1","1,2","1,3"等.下一级节点将具有类似"1,1,1"的标签. ","1,1,2",......,"1,2,1","1,2,2",......
假设节点的" 订单号 "是其父节点的子节点列表中的"该节点的从1开始的索引 ".
通用规则:节点的标签由其父标签后跟逗号和节点的" 订单号 "组成.
因此,为了回答O(1)中两个节点是否相关(即祖先 - 后代),我将检查其中一个节点的标签是否是另一个标签的" 前缀 ".虽然我不确定这些标签是否可以被认为占据O(N)空间.
预计会有任何批评者或其他方法.
jQuery有一个可爱的,有点错误的名为nearest()的方法,它在DOM树中寻找匹配的元素.例如,如果我有这个HTML:
<table src="foo">
<tr>
<td>Yay</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
假设element设置为<td>,那么我可以src像这样计算值:
element.closest('table')['src']
Run Code Online (Sandbox Code Playgroud)
如果缺少表元素或其src属性,那将彻底返回"undefined".
在Javascriptland中习惯了这个,我很想在Rubyland中找到与Nokogiri相同的东西,但是我能够想出的最接近的是使用祖先()的这种明显不优雅的黑客攻击:
ancestors = element.ancestors('table')
src = ancestors.any? ? first['src'] : nil
Run Code Online (Sandbox Code Playgroud)
需要三元组,因为如果在空数组上调用,则返回nil.好主意?
查询中是否有实体的子项?
鉴于:
class Factory(db.Model):
""" Parent-kind """
name = db.StringProperty()
class Product(db.Model):
""" Child kind, use Product(parent=factory) to make """
@property
def factory(self):
return self.parent()
serial = db.IntegerProperty()
Run Code Online (Sandbox Code Playgroud)
假设有500家工厂生产了500种产品,总计250,000种产品.有没有办法形成一个资源有效的查询,只返回一个特定工厂生产的500个产品?祖先方法是一个过滤器,因此使用例如Product.all().ancestor(factory_1)将需要重复调用数据存储区.
我有一个任意的树结构.
root
|--node1
| |--node2
| | |--leaf1
| |
| |--leaf2
|
|--node3
|--leaf3
Run Code Online (Sandbox Code Playgroud)
每个节点和叶子有2个属性:id和name.
1.:给出了一个叶子id.查询应该返回从root到该leaf的整个路径,包含所有节点id和name属性.
如果返回值是排序的节点数组,或者它是嵌套节点的对象,那么这一点并不重要.
示例:如果给出了idof leaf2,则查询应返回:root(id, name), node1(id, name), leaf2(id, name).
2.:给定任何节点id:获取整个(子)树.在这里检索每个节点都有一个children数组的单个对象会很不错.
1.:首先,我尝试将树简单地建模为单个JSON文档,但随后查询将变得不可能:无法找出叶子的嵌套级别.如果我知道id从根到叶子的整个路径,我必须使用具有多个位置运算符的投影,而MongoDB目前不支持.此外,不可能对叶子进行索引,ids因为嵌套可以是无限的.
2.:下一个想法是使用平面数据设计,其中每个节点都有一个包含节点祖先的数组ids:
{
id: ...,
name: ...,
ancestors: [ rootId, node1Id, ... ]
}
Run Code Online (Sandbox Code Playgroud)
这样我就必须做2个查询,以获得从root到某个节点或叶子的整个路径,这非常好.
如果我选择数据模型2.:我如何获得整个树或子树?
获得所有后代很容易:find({ancestors:"myStartingNodeId"}).但那些当然不会被排序或嵌套.
有没有办法使用聚合框架或完全不同的数据模型来解决这个问题? …
这个问题可以在每个查询的O(n + m)中轻松解决,但是这可以通过比O(n²)更好的预处理来更好地回答这些查询吗?
在树中,可以通过预订和按顺序轻松完成.我在DAG尝试了类似的东西,但它没有任何意义.
我也尝试在DAG问题中将此问题更改为LCA,但在DAG中找到LCA无法快速解决.
准确地说,约束让我们说:
n - 顶点数,最多10 ^ 5
m - 边数,最多10 ^ 5
q - 查询数量,最多10 ^ 5
algorithm graph ancestor directed-acyclic-graphs data-structures
我有一个TreeView,它被修改为在文本前面显示图像.所以我修改后的TreeViewItem被称为ImagedTreeViewItem.此ImagedTreeViewItem有一个Property,其中包含要显示的Image-Control图像.ImagedTreeViewItem还有一个属性,用于检查ImagedTreeViewItem-Icon是否为文件夹-Icon.此属性的名称为"IsFolder".
我的问题是:
I'm Binding the Ancestors-Property (here: The ImagedTreeViewItem)获取我需要的数据.对于我的Image-Control,它完美地工作,对于我后来添加的上下文菜单没有.我不明白为什么,因为基本上它是同一个命令.
这是XAML中我的"ImagedTreeView"的代码:
<TreeView.Resources>
<Style TargetType="{x:Type myClasses:ImagedTreeViewItem}">
<Setter Property="HeaderedItemsControl.HeaderTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<!-- Here it works!!! -->
<Image Height="16" Source="{Binding Path=Icon, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type myClasses:ImagedTreeViewItem}}}" Stretch="Fill" Width="16" />
<TextBlock Margin="5,0" Text="{Binding}" />
<StackPanel.ContextMenu>
<ContextMenu>
<!-- Here not :( -->
<MenuItem Command="my:ImagedTreeView.AddFolder" Header="Add Folder"
IsEnabled="{Binding Path=IsFolder,
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type myClasses:ImagedTreeViewItem}}}">
<MenuItem.Icon>
<Image Source="folderadd16.png" />
</MenuItem.Icon>
</MenuItem>
<!-- ... -->
</ContextMenu>
</StackPanel.ContextMenu>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</TreeView.Resources>
Run Code Online (Sandbox Code Playgroud)
我认为这段代码中的第二个绑定找不到祖先.Visual Studio的输出窗口告诉我同样的事情:
System.Windows.Data Error: 4 …Run Code Online (Sandbox Code Playgroud) 好的,所以我正在Smalltalk的一个学校作业,基本上它的要点是我写了3个"手动"设置和覆盖方法的类.MyObject类包含在另一个类ManualTracer中,该类继承自ObjectTracer.
MyObject包含一个类变量manualSet,它是一组符号,指定手动为其分配哪些方法,即重写继承.这个设置是使用类方法manualSet声明的:它接受一组符号.我的问题是我需要这个manualSet来根据以下标准过滤掉它收到的集合:
通过在源代码中包含注释"@Manual"来检查手动方法.到目前为止,我的代码如下所示:
manualSet: aSet
| validatedSet |
( aSet == nil ) ifTrue: [ manualSet:= nil ]
ifFalse: [
(aSet isMemberOf: Set) ifFalse:[^nil].
validatedSet:= aSet select:[ :each| (each isMemberOf:Symbol)
and:(self respondsTo:each)
and:(self isManual:each in: self)
and:((self isManual:each in:super)not)].
manualSet:= validatedSet.
]
Run Code Online (Sandbox Code Playgroud)
所以"超级"显然不够好,我需要经历所有的祖先,而不仅仅是父母.我还需要查看所有祖先的评论,并确定它们是否包含"@Manual".任何帮助都将非常感谢,谢谢!
我想有xpath,它获取没有祖先的节点,祖先是特定节点的第一个后代.
我们假设我们有这样的xml文档:
<a>
<b>This node</b>
<c>
<a>
<b>not this</b>
<g>
<b>not this</b>
</g>
</a>
<a>
<b>This node</b>
<c/>
</a>
</c>
</a>
<a>
<c>
<a>
<b>not this</b>
</a>
<a>
<b>This node</b>
</a>
<a>
<b>This node</b>
</a>
<a>
<b>This node</b>
</a>
</c>
</a>
<d>
<b>This node</b>
</d>
Run Code Online (Sandbox Code Playgroud)
我想选择文档中没有作为祖先节点的所有b节点// a/c/a [1].