2

これは少し変わったものです。HTML は doxygen によって生成されているため、変更できないことに注意してください。

ファイル ブラウザの JavaScript の動作を変更しようとしています。現在、フォルダをクリックすると、その下にあるすべてのフォルダが完全に展開されます。代わりに、フォルダー内に直接あるフォルダーとファイルを表示したいだけです。

HTMLは次のようなものです(ここでは簡単にするために無効なhtmlです)

<table>
<tr id="row_0" onclick="toggleFolder(0)">Folder1</tr>
<tr id="row_0_0" onclick="toggleFolder(0_0)">Project1</tr>
<tr id="row_0_0_0">File1.c</tr>
<tr id="row_1" onclick="toggleFolder(1)>Folder 2</tr>
</table>

次のような構造を表します。

  • フォルダ 1
    • プロジェクト1
      • ファイル1
  • フォルダ 2

現在、doxygen の javascript toggleFolder 関数は以下のように動作します (何が起こっているのかを説明するためにコメントを追加しました)。

function toggleFolder(id)
{
  var n = $('[id^=row_'+id+']'); //all rows "beneath" the clicked one
  var i = $('[id^=img_'+id+']'); //img's in rows "beneath" clicked
  var a = $('[id^=arr_'+id+']'); //a's in rows "beneath" clicked
  var c = n.slice(1); //remove the first match (the clicked row)

  //If the first element (reduce matches) is visible hide everything...
  if (c.filter(':first').is(':visible')===true) {
    i.attr('src','ftv2folderclosed.png'); //probably not needed
    a.attr('src','ftv2pnode.png'); //probably not needed
    c.hide();
  } else {
    i.attr('src','ftv2folderopen.png');
    a.attr('src','ftv2mnode.png');
    c.show();
  }
  updateStripes(); //update even/odd classes
}

代わりに、row_0_0_0 ではなく row_0 をクリックしたときに row_0_0を選択したいのですが、これを実装するようにセレクターを変更するにはどうすればよいですか?

御時間ありがとうございます!


最後に、受け入れられた回答に基づいて、以下のようなものを使用しました

行は単なる$(tr)同等のものです

  //Only match elements AFTER this one (can't hide elements before)
  var childRows = rows.filter(function() {
    re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
    return this.id.match(re);
  });

  //All sub images
  var childImages = childRows.find("img");

  //Only the img images
  var childImg = childImages.filter("[id^=img]");

  //Only the arr images
  var childArr = childImages.filter("[id^=arr]");
4

1 に答える 1

1

交換:

var n = $('[id^=row_'+id+']');

と:

var n = $("tr").filter(function() {
    re = new RegExp('^row_'+id+'_\\d+$', "i");
    return this.id.match(re);
});

同等のコードは画像/アンカーでも機能します(ただし、質問に例が表示されないため、正しいフィルターを記述できません)。

于 2012-09-10T12:53:10.157 に答える