0

我有一个包含嵌套表的 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")

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

谢谢,李

ps我只能通过使用来做到这一点:

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

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

4

3 回答 3

2

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

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

如果您能够修改html。一种更简洁的方法是将一个类分配给您尝试获取的表,然后使用最接近的

field.closest(".someClass").data("isArray")
于 2012-09-10T15:57:41.147 回答
1

看到这个电话

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

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

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

于 2012-09-10T15:58:10.060 回答
1

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

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

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

field.closest('table[data-isArray]');
于 2012-09-10T16:01:00.963 回答