14

它能做什么:

<p class="foo"></p>
$('p').addClass('bar');

输出:

<p class="foo bar"></p>

我需要的:

<p class="bar foo"></p>

那么是否可以将一个类添加到一个元素的第一个位置?

编辑(上下文):现在最后一堂课有一个拆分功能。如果添加了另一个类,则它也将附加到第二个拆分数组中。

4

6 回答 6

15
 (function($) {

    jQuery.fn.extend({
        prependClass: function(newClasses) {
            return this.each(function() {
                var currentClasses = $(this).prop("class");
                $(this).removeClass(currentClasses).addClass(newClasses + " " + currentClasses);
            });
        }
    });

})(jQuery);
于 2014-05-23T22:50:29.080 回答
7
function prependClass(sel, strClass) {
    var $el = jQuery(sel);

    /* prepend class */
    var classes = $el.attr('class');
    classes = strClass +' ' +classes;
    $el.attr('class', classes);
}
于 2013-01-22T15:21:39.493 回答
5

这是另一种方法。

$('#foo').attr('class', 'new-class ' + $('#foo').attr('class'));
于 2017-05-10T12:30:31.170 回答
3

由于您对className字符串的控制有限,这根本不应该成为您的依赖项,但您可以这样做:

$("p").removeClass('foo').addClass('bar foo');
于 2013-01-22T15:20:38.513 回答
0

你可以试试这个,现场演示:

http://jsfiddle.net/oscarj24/eZe4b/

$('p').prop('class', 'bar foo');

否则,您将需要使用addClass并按该顺序removeClass获得bar foo结果。


另一方面,我完全不明白您的问题,但是如果您只想将bar foo类添加到第一个p元素,请执行以下操作:

$('p').eq(0).prop('class', 'bar foo');

于 2013-01-22T15:22:02.453 回答
0

这是一个没有破解的解决方案:

$(".product").each(function(i, el) {
  var cList = [];

  $.each(this.classList, function(index, val) {
    cList.push(val);
  })

  this.classList.remove(...cList);

  cList.unshift("first-class");

  this.classList.add(...cList);

  // here it is
  console.log(this.classList);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
  <li class="product type-product status-publish">a</li>
  <li class="product type-product status-publish">b</li>
  <li class="product type-product status-publish">c</li>
</ul>

于 2019-04-04T15:59:03.313 回答