检查class属性是否为空,然后如果jQuery为true则将其删除

时间:2010-01-13 15:51:09

标签: jquery

我想从具有空类属性的所有元素中删除class属性。

例如:

`<li class="">One</li>`

变为

<li>One</li>

我一直在努力解决这个问题!我得到的最接近的是

var len = $(".splitcolcontainer ul li[class]").val().length;
 if (len == 0)
  {
  $('.splitcolcontainer ul li').removeAttr("class");
  }

但没有雪茄。我知道这将是非常简单,但没有任何谷歌搜索给我的光!欢呼声。

编辑:由于人们已经问我为什么要删除它,这里是整个脚本:

$(document).ready(function() {
     $( '.splitcolcontainer ol, .splitcolcontainer ul').each(function() {
          if($(this).is("ol")) { var ordered = true; }
          var colsize = Math.round($(this).find("li").size() / 2);
          $(this).find("li").each(function(i) {
               if (i>=colsize) {
                    $(this).addClass('right_col');
               }
            });
          if(ordered) {
               $(this).find('.right_col').insertAfter(this).wrapAll("<ol class='splitcol' start='" + (colsize+1) + "'></ol>").removeClass("right_col");

          } else {
                $(this).find('.right_col').insertAfter(this).wrapAll("<ul class='splitcol'></ul>").removeClass("right_col");            
            }

     });


    $('.splitcolcontainer').after('<div class="clear">&#160;</div>');
    $('.splitcolcontainer ul, .splitcolcontainer ol').wrap('<div></div>');
});

有一个空类的原因是因为我正在添加类'right_col',然后在以后删除它。我不知道是否会有其他类,所以我需要检查该属性是否为空。感谢您的帮助!

7 个答案:

答案 0 :(得分:20)

$('*[class=""]').removeAttr('class');

答案 1 :(得分:3)

我同意,removeClass留下一个空类属性是很奇怪的。我希望在addClass之后,removeClass会将DOM恢复到原始状态。

我最终做的是:

$(this).removeClass("my-class").filter('[class=""]').removeAttr('class');

应该非常高效。

(我的代码用于HTML编辑器,因此生成的代码尽可能干净很重要。)

答案 2 :(得分:1)

在解析文档并创建DOM树之后,元素的属性实际上只是各个DOM对象的属性,因此虽然您可以从源中删除该属性,但它仍然存在(但为空)在DOM中的每个对象上。

答案 3 :(得分:1)

$('li[class=""]').each(function() {
    this.removeAttribute('class');
});

答案 4 :(得分:1)

你真的不需要任何库(比如jQuery)这样做:

if (element.className == "")
    element.removeAttribute('class');

答案 5 :(得分:0)

添加/删除类是jQuery库的核心功能:http://docs.jquery.com/Attributes

您可以看到任何给定的元素集合是否具有hasClass(http://docs.jquery.com/Attributes/hasClass#class

的相关类

然后使用removeClass(http://docs.jquery.com/Attributes/removeClass#class

删除特定的类

因此,如果您需要从特定元素中删除类“abc”,请执行以下操作:

$("#element").removeClass("abc");

这将删除指定的类,即使其中有其他类。添加类的工作方式相同。

答案 6 :(得分:0)

考虑class属性中的空格:

&#13;
&#13;
var nodesWithClass = document.querySelectorAll("[class]");

[...nodesWithClass].forEach(node => {
  if( !node.className.trim() )
    node.removeAttribute('class');
})


console.log( document.body.children );
&#13;
<a class="">one</a>
<a class=' '>two</a>
<a class='    '>three</a>
&#13;
&#13;
&#13;

当然这是一个非常概括的场景,应该考虑一些事情,比如使用querySelectorAll,这可能更具体,然后在整个文档中搜索带有类的节点。其次是使用ES2015技巧将nodesWithClass HTMLCollection转换为数组(请参阅this question)。