0

autoBike(); を停止しようとしています。#bike-main-slider div.bikedata-bike 属性値が存在しない場合、bike 関数が実行されます。

<script>

    var bike = '<?=(isset($_REQUEST['bike']) ? htmlentities($_REQUEST['bike']) : null)?>';

    autoBike = function () {

         var bikeIndex = $('#bike-main-slider div.bike[data-bike=' + bike + ']').index();

         mainSlider.goToSlide(bikeIndex);  

    };

    autoBike();

</script>

<div id="slideshow">

     <div class="bike" data-bike="50cc"></div>
     <div class="bike" data-bike="100cc"></div>
     <div class="bike" data-bike="150cc"></div>
     <div class="bike" data-bike="200cc"></div>
     <div class="bike" data-bike="250cc"></div>
     <div class="bike" data-bike="350cc"></div>

</div>


これは可能ですか?

たとえば、私のURLが...

http://example.com/?bike=450cc

そして、#slideshow div に 450cc が存在しないことがわかるように、autoBike();data-bike 属性値が存在しない場合に関数が実行されないようにする方法はありますか?

jQuery の使用


ありがとう

4

3 に答える 3

2

セレクターを呼び出したときに返されるオブジェクトの長さを確認できます。ゼロの場合は、最初に行うことを関数から返すだけです。

var autobike = function () {

   var elms = $('#bike-main-slider div.bike[data-bike=' + bike + ']');
   if (elms.length === 0)
       return;

   // Do your stuff here, at least one element matched.
}

上記のコードを使用した実際の例を次に示します: http://jsfiddle.net/Gp5Xw/

length-property と jQuery の .size() の比較

セレクターを使用して jQuery 関数を呼び出すと配列が返されるため、その配列には、他の JavaScript 配列と同様に、読み取り可能な長さプロパティがあります。jQuery の.size()メソッドを使用すると、length プロパティを読み取るのと同じ結果が生成されますが、追加の関数呼び出しが必要であり、これはまったく不要です。実際に length-property を使用するのはマイクロ最適化ですが、それでもなおです。

のjQueryドキュメントから.size()

.size() メソッドは機能的には .length プロパティと同等です。ただし、関数呼び出しのオーバーヘッドがないため、.length プロパティが優先されます。

于 2012-11-22T13:15:45.540 に答える
1
autoBike = function () {
     var $bike = $('#bike-main-slider div.bike[data-bike=' + bike + ']');
     if($bike.size() > 0) {
          var bikeIndex = $bike.index();
          mainSlider.goToSlide(bikeIndex); 
     }
};
于 2012-11-22T13:18:44.197 に答える
1

これはうまくいくはずです...

$(document).ready(function() {

var bike = '<?=(isset($_REQUEST['bike']) ? htmlentities($_REQUEST['bike']) : null)?>';

$('bike').each(function() {
 if ($(this).attr('data-bike') === bike) {
     autoBike();
 }
});

});

autoBike() は、自転車の URL パラメータが data-bike 属性として存在する場合にのみ実行されます...

于 2012-11-22T13:22:26.437 に答える