如果存在类,则加载标记

时间:2015-06-03 00:37:48

标签: javascript jquery html css

我想根据文档中某些类的存在将标记加载到我的文档中。但问题是如果确定的类根本不存在则加载。

我的代码是

(function($){
   'use strict';
    var prefixMarkUp = '<ul class="filter-elements hidden" >'+
                          '<li><a href="#" class="current"></a></li>'+
                        '</ul>';

    if($('body').has('.filter-container')){
      if(!$('body').hasClass('filter-elements')){
        $('footer.footer').before(prefixMarkUp)
      }
    }
})(jQuery);

此处如果.filter-container不存在prefixmarkup加载,即使存在.filter-elements prefixmarkup,也会加载height 我现在该怎么办?

2 个答案:

答案 0 :(得分:1)

<强>首先

  • 如果将类分配给元素,.hasClass()方法将返回true,即使其他类也是如此。
  • .has()方法从匹配元素的子集构造新的jQuery对象。

您需要更改:

if($('body').has('.filter-container')){

if($('body').has('.filter-container').length){

FIDDLE(示例): https://jsfiddle.net/lmgonzalves/c8nwp813/1/

了解详情herehere

答案 1 :(得分:0)

length添加到任何jQuery对象将返回所选元素的数量。所以你可以做到以下几点。

if( $('.filter-container').length ){
    if( !$('body').hasClass('filter-elements') ){
        $('body').before(prefixMarkUp)
    }
}

如果$('.filter-container').length大于0,则语句将为true,并且将检查第二个if语句。如果为0,则该语句将为false。

您还可以使用length作为第二个if语句。但!$('body').hasClass('filter-elements')更具可读性。

if( !$('body.filter-elements').length ){
    $('body').before(prefixMarkUp)
}