0
var listname=$(this).parents(".x-grid3-row-table").children(".x-grid3-cell-inner.x-grid3-col-1").text();
console.log(listname);

console.log は以下を返します。

(an empty string)

listname が空である理由を教えてください。Ext.Ajax.request で listname をパラメーターとしてサーバー側メソッドに渡す方法も教えてください。

これは、生成されたページからの html コードです。

<table class="x-grid3-row-table>
  <tr>
   <td class="x-grid3-col x-grid3-cell x-grid3-td-1 " tabindex="0" style="text-align: left;width: 265px;">
     <div class="x-grid3-cell-inner x-grid3-col-1" unselectable="on">foo_bar@domain.de</div>
   </td>
   <td class="x-grid3-col x-grid3-cell x-grid3-td-2 x-grid3-cell-last " tabindex="0" style="width: 59px;">
      <div class="x-grid3-cell-inner x-grid3-col-2" unselectable="on">
        <span class="free">free</span>
       </div>
   </td>
  </tr>
  <tr class="x-grid3-row-body">
  <!-- 7 Elements Markup down, who all act wrapping for the following -->
    <div class="details">
      <!-- some other markup elements, who also contain data, but are not further interesting-->
      <td class="data"> foo bar detail data </td><!-- not of interest-->
      <td class="edit"><input value="edit" onclick="see function on top" type="button" /> </td>
    </div>
  </tr>
</table>

ターゲットはfoo_bar@domain.deを抽出し、それをパラメーターとしてサーバーメソッドに渡すことです。メソッドはウィンドウを作成することになっていますが、それは別の話です。

table('.x-grid3-row-table')onclick 呼び出しは、指定された html コードでラップされた展開されたグリッド パネル本体からのものです。

4

2 に答える 2

2

子セレクターのクラス名の間にスペースがありますが、マークアップは、両方のクラス名が同じ要素であることを示しています。

複数のクラス名を持つ要素を選択するには、セレクターのクラス名の間にスペースを入れないでください.classname1.className2

var listname = $(this).parents( "。x-grid3-row-table")。children( "。x-grid3-cell-inner.x-grid3-col-1")。text();
console.log(listname);

動作するはずです。

さらに明確にする: 問題のようにクラス名の間にスペースがある場合は、.x-grid3-col-1クラス内に.x-grid3-cell-innerクラスを持つ要素を選択しようとしていることを意味します。これは親子関係です。

編集:

ボタンが次の行にある場合は、JQueryの.prev()trセレクターを、テーブルではなく親セレクターとして使用することと組み合わせて使用​​できます。

listname=$(this).parents("tr").prev().children(".x-grid3-cell-inner.x-grid3-col-1").text();

または、同じ行にある場合は、単に

listname=$(this).parents("tr").children(".x-grid3-cell-inner.x-grid3-col-1").text();

于 2013-02-07T09:41:43.210 に答える
0

これを行うよりクリーンな方法があるかもしれませんが、ボタン クリック ハンドラとしてこれを思いつきました。これは、探している text() がボタンから 1 つ上のテーブル行にあると想定しています。

    var $rows,button=this,i;
    $rows=$(".x-grid3-row-table tr");
    for(i=0;i<$rows.length;i++){
        // get the button of that row
        // not sure how to as your button is not
        // in a table row with the code you posted
        if($rows[i].getElementsByTagName("input")[0]===
          button){
            break;
        }
    }
    // I assume the button is in a row before the button
    console.log($($rows[i-1])
        .find(".x-grid3-cell-inner.x-grid3-col-1")
        .text()
于 2013-02-07T11:05:20.427 に答える