2014-10-02 56 views
2

如何使用JQuery删除同一元素上的重复类?如何删除同一元素上的重复类

例子:

<a href="#" class="foo foo">link</a> 

我只想要一个类此元素,如下图所示:

<a href="#" class="foo">link</a> 

我已经尝试过,但没有成功。由于

+1

是什么,如果有多个条目 – 2014-10-02 17:15:39

+1

因为有一个插件的错误,我需要删除重复类的问题。 – 2014-10-02 17:22:26

+0

@T J,我很抱歉,我是新手在stackoverflow。我选择Mathias的答案,因为它更完整,有一个循环,那就是我需要的。 – 2014-10-02 17:50:55

回答

4

可以使用removeClass()删除现有的类,添加使用addClass()一回如下:

$("a").removeClass("foo").addClass("foo");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a href="#" class="foo foo">link</a>


更新按照评论

可以扩展如下图所示的更一般的解决方案,它遍历一个jQuery对象,并消除任何重复类名jQuery函数的命名空间:

(function($) { 
 
    $.fn.removeDuplicateClass = function(className) { 
 
    return this.removeClass(className).addClass(className); 
 
    }; 
 
    $.fn.removeDuplicateClasses = function() { 
 
    this.each(function (i, element) { 
 
     var arr = [], 
 
     classList = $(element).attr("class").split(" "); 
 
     $.each(classList, function (i, item) { 
 
      if (arr.indexOf(item) < 0) { 
 
       arr.push(item); 
 
       } 
 
     }); 
 
     $(this).attr("class", arr.join(" ")); 
 
    }); 
 
    return this; 
 
    }; 
 
})(jQuery); 
 

 
$("a").removeDuplicateClasses(); // or $("a").removeDuplicateClass("foo");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul> 
 
    <li> 
 
    <a href="#" class="foo foo">foo dup</a> 
 
    </li> 
 
    <li> 
 
    <a href="#" class="bar foo bar">bar dup</a> 
 
    </li> 
 
</ul>

+0

这就是我需要的!多谢你们。 – 2014-10-02 19:13:09

+0

我把它包起来,包括你的初始答案和链式能力的自我回报。 – 2018-03-09 15:16:54

0

你可以得到所有类与.attr()函数:

var element = $('a'); 
var classes = element.attr('class'); 

然后你可以分割类:

var classArray = classes.split(' '); 

之后,你可以遍历通过这些类

var temp = Array(); 
classArray.forEach(function(c){ 
    // check if not exists in temp array 
    if(temp.indexOf(c) < 0){ 
     // add to temp array 
     temp.push(c); 
    } 
    else { 
     // remove class (and add again to get it once) 
     element.removeClass(c).addClass(c); 
    } 
}); 

看这个http://jsfiddle.net/fwkj1pLz/1/的一个例子。

+0

感谢您的回答@Mathias – 2014-10-02 19:27:32

0

您也可以使用hasClass来检查元素是否包含您正在查找的重复类,然后删除不需要的元素并再次返回。链接Demo

<a href="#" class="foo foo">link</a> 

var elem = $('a'); 
alert(elem.attr('class')); 

if (elem.hasClass('foo foo')){ 
    elem.removeClass("foo").addClass("foo"); 
    alert(elem.attr('class')); 
} 
+0

向下投票,敢于评论? – 2014-10-02 17:47:28

+0

感谢您的回答@Dennis R. – 2014-10-02 17:52:08