javascript怎么获得特定的祖先元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript怎么获得特定的祖先元素相关的知识,希望对你有一定的参考价值。

javascript code?

[code=javascript] function delet_s(obj)
alert(0);
var am=$(obj).parent().parent().find($("input[name^='s_acc']")).val();
alert(am)
$(obj).parent().parent().remove();


[/code]

XML/html code?

<table id="detailTable" width="90%" border="0" cellspacing="0" cellpadding="0" class="addform-base">
<tr id="copy_tr">
<td width="30%"><input type="text" name="claimVoucherDetail.account" id="c_account" /><span class="notice">*</span></td>
<td width="30%"><input type="text" name="claimVoucherDetail.desc" id="desc" /><span class="notice">*</span></td>
<td width="10%"><img src="<%=request.getContextPath() %>/images/add.gif" width="16" height="16" id="AddRow" onclick="copy_as()"/></td>
<td>
<img src="<%=request.getContextPath() %>/images/delete.gif" width="16" height="16" onclick="delet_Vou(this)" />
</td>
</tr>

</table>
参考技术A js原生提供parentNode,可以选到当前元素的parent,然后把这个parent当子元素选到他的parent,直到parent选到body
var x = document.getElementById('by-email');
var result = []
while (x.tagName != 'BODY')
result.push(x);
x = x.parentNode;


在本页面中打开chrome调试窗口,执行上面的代码

如何从特定节点获取树祖先列表?

【中文标题】如何从特定节点获取树祖先列表?【英文标题】:How can I get a list of tree-ancestors from a particular node? 【发布时间】:2017-02-27 22:41:42 【问题描述】:

给定一棵树,其中每个节点可以有 N 个子节点,但只有 1 个父节点。如何获得一个节点的祖先?例如,假设我得到了这棵树:

#  Operator
# ... FooOperator
# ...... BOperator
# ......... B1Operator
# ............ B11Operator
# ...... AOperator
# ......... A2Operator
# ......... A1Operator
# ......... A3Operator
# ...... COperator
# ......... C1Operator
# ......... C2Operator
# ............ C21Operator

tree = 
    'children': [
        'children': [
            'children': [
                'children': [
                    'children': [],
                    'class': 'B11Operator',
                    'parent': 'B1Operator'
                ],
                'class': 'B1Operator',
                'parent': 'BOperator'
            ],
            'class': 'BOperator',
            'parent': 'FooOperator'
        ,
        'children': [
            'children': [],
            'class': 'A2Operator',
            'parent': 'AOperator'
        ,
            'children': [],
            'class': 'A1Operator',
            'parent': 'AOperator'
        ,
            'children': [],
            'class': 'A3Operator',
            'parent': 'AOperator'
        ],
        'class': 'AOperator',
        'parent': 'FooOperator',
        'children': [
            'children': [],
            'class': 'C1Operator',
            'parent': 'COperator'
        ,
            'children': [
                'children': [],
                'class': 'C21Operator',
                'parent': 'C2Operator'
            ],
            'class': 'C2Operator',
            'parent': 'COperator'
        ],
        'class': 'COperator',
        'parent': 'FooOperator'
    ],
    'class': 'FooOperator',
    'parent': 'Operator'
    ],
     'class': 'Operator',
     'parent': None


def display_tree(node, indent=0):
    print('.' * indent, node['class'])
    indent += 3
    for child in node['children']:
        display_tree(child, indent)

display_tree(tree)

您如何从"C21Operator" 获取祖先列表,例如结果为["Operator", "FooOperator", "COperator", "C2Operator", "C21Operator"]

【问题讨论】:

你尝试过什么,它到底有什么问题? 使用这种数据结构,我认为这不太可能。好吧,也许如果你从tree 开始走所有可能的路径,然后返回引导你到"C210Operator" 的路径。但也许用parent 属性实现你自己的Node 类,然后走父链? +1 对@juanpa.arrivillaga 的自定义类的建议,该类实现了更适合此问题的更好的数据结构。 【参考方案1】:

鉴于您的数据结构,我认为只有暴力解决方案是可能的:

In [6]: def path_to_child(tree, target, acc=None):
   ...:     if acc is None:
   ...:         acc = []
   ...:     if tree['class'] == target:
   ...:         return acc
   ...:     for child in tree['children']:
   ...:         found = path_to_child(child, target, acc + [tree['class']])
   ...:         if found is not None:
   ...:             return found
   ...:

In [7]: path_to_child(tree, 'C21Operator')
Out[7]: ['Operator', 'FooOperator', 'COperator', 'C2Operator']

In [8]:

如果您知道目标的预期位置,您或许可以更智能地遍历树。

【讨论】:

你的cmets是对的,最好的方法是建立一个合适的数据结构,让你可以线性地遍历父母。无论如何,你解决了我只是想知道的提出的问题;-)

以上是关于javascript怎么获得特定的祖先元素的主要内容,如果未能解决你的问题,请参考以下文章

如何选择没有特定祖先元素的元素

Javascript获取元素的坐标

使用 Javascript 获取元素的继承(级联)祖先 CSS 类

如何从特定节点获取树祖先列表?

javascript 怎么获得单选框值

查找具有特定类别的祖先。硒。网络驱动程序。使用 XPath