-5

私のアプリケーションでは、実行時に昇順でセルの ID を持つテーブルを生成するフレームワークを使用しています。行1と列1に「ElementX1X1」、行1と列2に「ElementX1X2」などがあるように...生成されるHTML構造は次のようになります。

<tr>
<td class="my_msg" align="left">
<id="ElementX1X1">

私が設定できるのは、クラス(my_msg)とセルの内容(テーブルの)です。私は単に作りたい:

var test=document.getElementById("ElementX1X1");
test.onclick=function();

しかし、セルを認識できません...クラス「my_msg」にある場合、または特定のコンテンツがある場合にのみgetElementByIdを作成したい(設定できるのは2つだけと言ったように).. . どうすれば問題を解決できるか、誰にもわかりませんか?! 前もって感謝します!

4

1 に答える 1

2

HTML を次のように更新します: <td id="ElementX1X1" class="my_msg" >...

編集済み - 壊れたフレームワークを回避するには:

<tr>
  <td class="my_msg" align="left">
   <id="ElementX1X1">
   some content
  </td>
  <td class="my_msg" align="left">
   <id="ElementX1X2">
   some content
  </td>
</tr>

行 1 列 2 を見つけたい場合は、要素の内容を検査するために少し jQuery を使用してごまかすことができます。

var row = 1; 
var column = 2;
var matched = null;
$(".my_msg").each({ 
    if($(this).html().indexOf('<id="ElementX' + row + 'X' + column + '">')!=-1){ 
        matched = $(this);
    } 
});

Matched は、探している要素または null を指しますが、セルの行と列の ID が既にわかっている場合は、DOM をたどってみませんか?

var row = 1; 
var column = 2;
var matched = null;
var table = document.getElementsByTagName("TABLE")[0]; // up to you how your find it
try {
    matched = table.getElementsByTagName("TR")[row-1].getElementsByTagName("TD")[column-1];
} 
catch(err) { 
    // not found
}

または力ずくの方法 (つまり、フレームワークの出力を修正する):

var table = $("#tableid");  // up to you how your find it
table.html(table.html().replace(/">\n<id="/g,'" id="'));

あなたのコードは次のとおりです。

<tr>
    <td class="my_msg" align="left" id="ElementX1X1">…&lt;/td>
    <td class="my_msg" align="left" id="ElementX1X2">…&lt;/td>
…

あなたが使用できるように

$("#ElementX2X1");

最初の行、2 番目の列を選択するには

どちらも特にエレガントではありませんが、バグのあるフレームワークが修正されるのを待っている間に仕事を終わらせる必要があります;)

于 2012-05-14T15:36:45.037 に答える