2014-10-24 3 views
0

У меня есть класс js-bootstrap3, который генерируется cms. Мне нужно проверить, содержит ли содержащий элемент только js-bootstrap3 и .unwrap() содержимое, но если у элемента есть несколько классов, которые включают js-bootstrap3, тогда я пытаюсь просто удалить этот класс.jQuery проверить, существует ли класс или имеет более одного класса

jsFiddle

$('.jsn-bootstrap3').each(function(){ 
    if($(this).attr('class') !== undefined && $(this).attr('class').match(/jsn-bootstrap3/)) { 
     console.log("match"); 
     $(this).contents().unwrap(); 
     $(this).removeClass('jsn-bootstrap3'); 
    } 
}); 

Это только кажется, что обнаружить какой-либо элемент с js-bootstrap3 как класс и разворачивает его.

+0

Вам не нужно, если блок вообще отсутствует. Ваше состояние всегда будет «истинным» – Satpal

ответ

2

this.className является строка со всеми классами для элемента (через пробел), так что если это не просто "jsn-bootstrap3" вы знаете, что есть более чем один класс:

$('.jsn-bootstrap3').each(function(){ 
    if($.trim(this.className) !== "jsn-bootstrap3") { 
     // Just jsn-bootstrap3 
     $(this).contents().unwrap(); 
    } else { 
     // More than just jsn-bootstarp3 
     $(this).removeClass('jsn-bootstrap3'); 
    } 
}); 
0

Dependeing на браузерах, которые необходимо поддержка element.classlist (IE10 +) может быть или не быть то, что вам нужно.

классList возвращает маркерный список атрибута класса.

classList - это удобная альтернатива доступу к списку классов элементов в виде строки с разделителями-пробелами через element.className. Он содержит следующие методы:

В противном случае, вы смотрите на расщепление Classname в массив типа так, чтобы подсчитать значения:

var classes = element.className.split(" ");

Основываясь на вашем примере вы могли бы сделать что-то Liket его :

$('.jsn-bootstrap3').each(function(i, el){ 
    if(el.className.indexOf('jsn-bootstrap3') != -1) { 
     console.log("match"); 
     if (el.className.split(" ").length > 1) { 
      $(this).removeClass('jsn-bootstrap3'); 
     } else { 
      $(this).contents().unwrap(); 
     } 
    } 
}); 
+0

Это одно из немногих мест, в которых мы * не нуждаемся в 'classLast', и нам не нужно разбирать' className'. –

0

Пробуйте этот код.

$(document).ready(function(){ 

    $('.jsn-bootstrap3').each(function(){ 

     var classes = $(this).attr('class'); 

     var new_cls = classes.split(' '); 

     if(new_cls.length > 1){ 

      $(this).removeClass('jsn-bootstrap3'); 

     } else { 

      $(this).contents().unwrap(); 

     } 

    }); 

});