6

私はおそらくjQueryの習熟度が約7または8(1〜10のスケール)なので、これが理にかなっているのかどうかはわかりませんが、jQuery関数を知っている人がいるかどうかを知りたいです。おそらく、与えられた条件が真である場合にのみjQueryのブランチを実行できるようにするプラグインです。そうでなければ、誰かがコンセプトに何らかの欠陥があると思っているかどうか聞いてみたいです(編集とそれがどのように欠陥があるか)

これに似た通常のJavaScript構文を使用して、さまざまなイベントの添付を制御できます。

var desiredElement = $('.parent')                        // find the parent element
                     .hover(overFunction,offFunction)    // attach an event while I've got the parent in 'scope'
                     .find('.child-element');            // then find and return the child
if (booleanVar1) {                                       // if one condition
    desiredElement.click(clickFunction1);                //   attach one event
} else if (booleanVar2) {                                // or if a different condition
    desiredElement.click(clickFunction2);                //   attach a different event
} else {                                                 // otherwise
    desiredElement.click(clickFunction3);                //   attach a default event
}
$('.parent').find('.other-child')                        // (or $('.parent .other-child')
    .css(SomePredefinedCssMapping)
    .hide()
//...

jQueryですべてを行う方法があるのか​​、それともそうしない正当な理由があるのか​​...おそらく次のようなものがあるのだろうかと思っていました。

$('.parent')                                // find the parent element
    .hover({overFunction,offFunction})      // attach an event while I've got the parent in 'scope'
    .find('.child-element')                 // then find the child
        .when(booleanVar1)                  // if one condition
            .click(clickFunction1)          //   attach one event
        .orWhen(booleanVar2)                // or if a different condition
            .click(clickFunction2)          //   attach a different event
        .orElse()                           // otherwise
            .click(clickFunction3)          //   attach a default event
        .end()
    .end()
    .find('.other-child')
        .css(SomePredefinedCssMapping)
//...

注:ブール値と関数が適切に定義されていると仮定すると、これは構文的に正しいと思いますが、かなり明確に意図を理解していると確信しています

提案されたjQueryは私には少しすっきりしているようです(??)賛成/反対?-これが私の質問です:

  • 基本的にすでにこれを行っているネイティブjQueryの一部はありますか?
  • この種のことを可能にする拡張機能はすでにありますか?
  • 思ったより難しいですか?(条件がtrueの場合は現在の要素セットを保持し、条件がfalseの場合は空の要素セットをプッシュしてから、条件ごとに要素セットをポップバックすると、メソッドが前の要素をポップバックするorのと同じようになります。通話end()後に設定)find()
  • 効率を大幅に低下させるものはありますか?

編集

質問は、メソッドチェーンを使用してこれを行う方法、またはなぜそれが推奨されないのか(詳細が望ましい)を尋ねます。代替案は求めていませんが、jQueryチェーンアプローチの問題を説明するためにそのような代替案が必要になる場合があります。また、上記の例ではブール値がすぐに評価されるため、他のソリューションでも同じように実行する必要があります。

4

2 に答える 2

2
$('.parent').hover(overFunction,offFunction)
    .find('.child-element')
    .click( booleanVar ? clickFunction1 :
            booleanVar2 ? clickFunction2 :
            clickFunction3 )
    .end()
    .find('.other-child')
    .css(SomePredefinedCssMapping)
于 2012-04-26T19:23:06.933 に答える
2

ハンドラー内でその条件付きロジックを実行できませんでしたか?

var boolVar1 = true,
    boolVar2 = false;

$(".foo").on("click", function(){
  if ( boolVar1 ) clickFunction1();
  if ( boolVar2 ) clickFunction2();
});
于 2012-04-26T19:18:28.107 に答える