2

スタイルがブロックである特定の子のdiv IDを取得する方法について頭を悩ませています。私は穴の日をグーグルとスタックオーバーフローでブラウジングしてきました。

以下を使用して、すべての子を取得できます。

var active = $('#myDiv').children().get();

しかし、スタイルをフィルタリングする方法がわかりません。.get() の後に .attr() を使用することはできません。したがって、後で作業する必要があるため、IDのみを知りたいです。

編集:

使用したい完全な関数は次のとおりです。

  // ON MODAL DISMISS, RESET STEPS
  $('#myDiv').on('hidden', function() {

    var currentStep = $('#myDiv').children().filter(function(){
        return $(this).css('display') === 'block'; 
    });

    //console.log(currentStep);
        replace(currentStep, step1);
  });


function replace( hide, show ) {
  document.getElementById(hide).style.display="none";
  document.getElementById(show).style.display="block";
}

HTML:

<div id="myDiv">
 <div id="step1">
  ...
 </div>
 <div id="step2">
  ...
 </div>
 <div id="step3">
  ...
 </div>
</div>

現在、モーダルを起動して手順を実行すると、手順 3 でモーダルを閉じてモーダルを再起動すると、手順 3 に進みます。そのため、却下する前に現在のステップが必要だと思ったので、それを置換関数に送信し、 currentStep のスタイルを none に設定し、最初のステップをブロックすることができます。

4

4 に答える 4

5

ブロックの子を返すためにこれを試してください:

$('#mydiv').children().filter(function () {
  return $(this).css('display') === 'block';
});

これは、その関数で返される子のみを返しtrueます。

アップデート

まず、すでに jQuery を使用している場合、わざわざ生の JS 選択プロセスをわざわざ使用する必要はありません。それ以外の

function replace( hide, show ) {
  document.getElementById(hide).style.display="none";
  document.getElementById(show).style.display="block";
}

への変更

function replace(hide, show) {
  $('#' + hide).hide();
  $('#' + show).show();
}

currentStepまた、一度に表示されるステップ ( ) は 1 つだけのようです。表示されている 1 つの要素を見つけようとしているだけなので、css を次のように設定してみませんか。

#mydiv div {
  display: none;
}
#mydiv div.show {
  display: block;
}

次に、クラスを削除/追加して、それらを表示/非表示にすることができます。この方法では、replace()関数は次のようになります。

function replace(show) {
  $('#mydiv div.show').removeClass('show'); // reset all shown children to be hidden
  $('#mydiv ' + show).addClass('show'); // same way you determine which div should show
}
于 2012-12-30T14:08:51.110 に答える
1

あなたが望む奇妙なこと...これを試してください

var active = $( '#myDiv' ).children().filter( function() {
    return 'block' == $(this).css( 'display' );
} );
于 2012-12-30T14:09:53.340 に答える
0

これは、ネイティブ ブロック要素を含むすべてのブロック要素を使用する小さなデモです。

$(selectedElements).filter(function(){
    return $(this).css('display') === 'block';
});
于 2012-12-30T14:13:24.633 に答える
0

多分これは要素をフィルタリングするのに役立つかもしれません: http://api.jquery.com/filter/

于 2012-12-30T14:06:21.873 に答える