插入类中间列表

Insert In Middle Of Class List

提问人:azoundria 提问时间:7/6/2016 最后编辑:Zakaria Acharkiazoundria 更新时间:7/6/2016 访问量:203

问:

我目前正在开发一个供我个人使用的 JQuery 应用程序,作为快捷方式,我正在根据列表中的最后一个类做出决定,它始终是某种标识符。这已经在许多地方完成,例如:

$("#myelement").attr('class').split(/\s+/).pop()

元素的类如下所示:

class1 class2 class_with_id

问题是现在我在代码中有一个地方,我试图在列表中添加一个类,我通常会这样做:

$("#myelement").addClass("newclass")

但是,这使得类看起来像这样:

class1 class2 class_with_id newclass

稍后获取标识符类会失败。我让它与这个一起工作:

$("#myelement").attr('class', "newclass " + $("#myelement").attr('class'))

这是将其添加到开头:

newclass class1 class2 class_with_id

我有两个问题,都相关:

  1. 这是完成将其添加到开头的最简单/最简单的方法吗?

  2. 有没有一种简单的方法可以在不进行花哨的字符串操作的情况下在集合的中间添加类。也就是说,我想让它成为倒数第二个元素:

    class1 class2 newclass class_with_id
    
JavaScript jQuery HTML CSS Attr

评论

4赞 Karl-André Gagnon 7/6/2016
我认为你有一个问题,但你正在寻找的解决方案不是好的。而不是 ,您可能应该使用 ...class_with_iddata-with-id="id"
0赞 will 7/6/2016
我同意 Karl-Andre 的观点,如果您改用数据属性,则无需担心这一点。您仍然可以使用 [data-x] 选择器在 CSS 和 JavaScript 中定位数据属性,因此,如果您将其设置为 data-id,则可以使用 [data-id] 调用它。
0赞 JSDBroughton 7/6/2016
有些人会发誓,按数据而不是类设置样式是不正确的,因为动态的数据属性不是语义内容。不过在我看来,这是完全合适的。

答:

2赞 Zakaria Acharki 7/6/2016 #1

正如注释中提到的,最好为此目的使用 data-* 属性,因为像现在这样使用 class 属性不是一个好习惯,它不是为这些情况而设计的,因此例如将 :

$("#myelement").attr('class').split(/\s+/).pop();

由:

$("#myelement").data('with-id');

获取属性,并通过以下方式添加它:data-with-id

$("#myelement").data('with-id','some value');

而不是:

$("#myelement").addClass("newclass");

希望这会有所帮助。

0赞 Pat Eidt 7/6/2016 #2
  1. 是的。

  2. 我不知道。

    class 属性是一个字符串,因此如果没有某种形式的字符串操作,我看不到任何方法可以执行您正在寻找的内容。

    var original = 'class1 class2 class_with_id';
    var newClass = 'new_class';
    var index = original.lastIndexOf(' ');
    var updated = original.slice(0, index) + ' ' + newClass + original.slice(index);
    

    会给你.class1 class2 new_class class_with_id

    另一种选择是为字符串创建自己的拼接或插入方法。

    String.prototype.insert = function (index, string) {
      if (index > 0)
        return this.substring(0, index) + string + this.substring(index, this.length);
      else
      return string + this;
    };
    
    var original = 'class1 class2 class_with_id';
    var newClass = 'new_class';
    var index = original.lastIndexOf(' ');
    var updated = original.insert(index, ' ' + newClass);
    

注意:正如卡尔-安德烈·加农(Karl-André Gagnon)所说。最好使用自定义数据属性,而不是当前方法。您可能会发现您的方法限制您使用任何修改类的插件。

0赞 Neville Nazerane 7/6/2016 #3

我不完全确定你为什么要使用这些类。但是假设由于某种原因你不能像一些建议的那样使用数据,而你更喜欢使用类,你可以制作一个jquery函数,以便能够轻松调用它。

$.fn.addClassAt = function(index, newClass){
    var classArray = $(this).attr('class').split(' ');
    classArray.splice(index, 0, newClass);
    var newClassStr = classArray.join(' ');
    return $(this).attr('class', newClassStr);
}

您现在可以将其用作

$(“#myElement”).addClassAt(2, 'newClass')