如何查找祖先元素并查询其元数据

时间:2012-09-10 15:53:02

标签: javascript jquery parents

我有一个包含嵌套表的html:

<table ....
<tbody ...
<tr ...
    <td class="Field">item1_1</td>
        <td class="Value">
        <table ...
        <tbody...
        <tr
            <td class="Field">0</td>
            <td class="Value">
            <table ...
                ....

可点击元素是字段。当用户单击某个字段时,我需要找到包含其表(2个表)的表并检查其元数据。 我试着用:

field.parents("table")[1]

这会返回正确的表,但不允许我查询其元数据:

field.parents("table")[1].data("isArray")

你能帮我弄清楚如何查询包含表的元数据吗?

谢谢, 李

P.S。 我只是设法使用:

field.parent().parent().parent().parent().parent().parent().parent().parent().data("isArray")

但我真的想避免这种丑陋。

3 个答案:

答案 0 :(得分:2)

您遇到的问题是对jquery对象建立索引的数组将返回一个dom对象。您可以使用eq来获取jquery对象。

field.parents("table").eq(1).data("isArray")

如果你能修改html。更简洁的方法是将类分配给您要获取的表,然后使用closest

field.closest(".someClass").data("isArray")

答案 1 :(得分:1)

看到这个电话

field.parents("table")[1].data("isArray")

我假设你正在使用jQuery.data()方法。 如果是,那么通过索引调用将返回一个HTMLElement而不是jQuery对象。 在这种情况下,请将代码更改为

$(field.parents("table")[1]).data("isArray")

答案 2 :(得分:1)

eq()将解决问题,但为了简单起见,您可以将id分配给外部表并仅创建一次table引用,而无需在每次用户点击时找到它。

还要考虑eq()用法可能会在另一个表中再次嵌入字段时产生一些mantainance问题,因为您完全依赖parents()返回的集合的索引来检索最外面的表

否则,如果该表是唯一具有内联data-*属性的表格,您可以使用

找到它
field.closest('table[data-isArray]');