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 を変更できる場合。さらにクリーンなアプローチは、取得しようとしているテーブルにクラスを割り当ててから、closestを使用することです。

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

eq()問題は解決しますが、簡単にするために、ユーザーがクリックするたびに検索する必要なく、id外部テーブルに を割り当てて への参照を一度だけ作成することができます。table

また、最も外側のテーブルを取得するためにeq()返されるコレクションのインデックスに完全に依存しているため、フィールドを別のテーブルに再度ネストすると、使用法によってメンテナンスの問題が発生する可能性があることも考慮してください。parents()

それ以外の場合、そのテーブルがインライン属性を持つ唯一のテーブルである場合、それdata-*を見つけることができます

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

この呼びかけを見て

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

jQuery.data() メソッドを使用していると思います。はいの場合、インデックスによる呼び出しは、jQuery オブジェクトではなく HTMLElement を返します。この場合、コードを次のように変更します

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

于 2012-09-10T15:58:10.060 に答える