提问人:azoundria 提问时间:7/6/2016 最后编辑:Zakaria Acharkiazoundria 更新时间:7/6/2016 访问量:203
插入类中间列表
Insert In Middle Of Class List
问:
我目前正在开发一个供我个人使用的 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
我有两个问题,都相关:
这是完成将其添加到开头的最简单/最简单的方法吗?
有没有一种简单的方法可以在不进行花哨的字符串操作的情况下在集合的中间添加类。也就是说,我想让它成为倒数第二个元素:
class1 class2 newclass class_with_id
答:
正如注释中提到的,最好为此目的使用 data-* 属性,因为像现在这样使用 class 属性不是一个好习惯,它不是为这些情况而设计的,因此例如将 :
$("#myelement").attr('class').split(/\s+/).pop();
由:
$("#myelement").data('with-id');
获取属性,并通过以下方式添加它:data-with-id
$("#myelement").data('with-id','some value');
而不是:
$("#myelement").addClass("newclass");
希望这会有所帮助。
是的。
我不知道。
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)所说。最好使用自定义数据属性,而不是当前方法。您可能会发现您的方法限制您使用任何修改类的插件。
我不完全确定你为什么要使用这些类。但是假设由于某种原因你不能像一些建议的那样使用数据,而你更喜欢使用类,你可以制作一个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')
评论
class_with_id
data-with-id="id"