如果选择器不存在,则停止函数运行 - jquery?

时间:2012-11-22 13:13:39

标签: jquery

我试图阻止我的autoBike();如果我的#bike-main-slider div.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>


这可能吗?

例如,如果我的网址是......

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

并且你可以看到我的#slideshow div中没有​​450cc,所以如果data-bike属性值不存在,那么无论如何都要阻止我的autoBike();函数运行?

使用jQuery


由于

3 个答案:

答案 0 :(得分: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/

长度属性与jQuery的.size()

使用选择器调用jQuery函数将返回一个数组,该数组将具有可以读取的length属性,就像任何其他JavaScript数组一样。使用jQuery的.size()方法将产生与读取length属性相同的结果,但它需要额外的函数调用,这是完全没必要的。这是一个微观优化,真正使用长度属性,但仍然。

来自.size()的jQuery文档:

  

.size()方法在功能上等同于.length属性;   但是, .length属性是首选,因为它没有   函数调用的开销。

答案 1 :(得分:1)

autoBike = function () {
     var $bike = $('#bike-main-slider div.bike[data-bike=' + bike + ']');
     if($bike.size() > 0) {
          var bikeIndex = $bike.index();
          mainSlider.goToSlide(bikeIndex); 
     }
};

答案 2 :(得分: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参数作为数据自行车属性存在...