【问题标题】:jQuery: Get class name from multiclass elementjQuery:从多类元素中获取类名
【发布时间】:2012-03-03 23:54:56
【问题描述】:

我选择了以下元素。获取类名 icon_23123 的最佳方法是什么?

<div class="icon icon_23123"></div>

是否有类似 [class^="icon_"] 来选择属性而不是元素? 还是应该获取所有类名,然后循环查找以 icon_ 开头的类名?

编辑:我想编写一个函数,它可以获取任何以 icon_ 开头的类名,并且只有那些类名。最终,我想得到下划线之后的部分,但它不一定是数字 - 我的计划是使用正则表达式(这些类名是常规的。)

EDIT2:我试图从中获取类名的元素已被选中,我只需要其中的类名(不是文档中的每个元素都带有 class="icon_.....")

EIDT3:我真正的问题是我混合了数据和样式。由于我不关心支持旧浏览器,因此我使用 data-id 来保存此数据的 id。

<div class="icon icon_23123" data-id="23123"></div>

【问题讨论】:

    标签: jquery jquery-selectors


    【解决方案1】:

    如果您使用类来存储数据,HTML5 提供了一种更方便的方式来将数据附加到元素 - data- attributes。例如:

    <div class="icon" data-id="23123"></div>
    

    然后就可以直接读取属性了(最​​跨浏览器的方式):

    var id = myelement.getAttribute('data-id');
    

    或者使用原生的dataset属性对象:

    var id = myelement.dataset.id;
    

    或者对旧版浏览器(IE10-)使用 jQuery 的 data() 方法:

    var id = $(myelement).data('id');
    

    也可以使用相同的data- 属性通过.icon[data-id="23123"] 等属性选择器将单个样式附加到元素。

    【讨论】:

    • 我正在使用该类进行样式设置,但您的建议很有帮助。
    • 您可以通过属性选择器将单个样式附加到元素:.icon[data-id="23123"],从而将data- 属性用于这两个目的。
    【解决方案2】:

    将 .attr() 与 .each() 结合使用:

    $('[class^="icon_"]').each(function () { console.log($(this).attr('class'); });
    

    这会传递所有类名以icon_ 开头的元素,并将其传递给每个函数。然后,您可以使用 .attr 访问元素的属性。如果你只需要访问第n个元素,你可以使用$('[class^=icon_]:eq(n)').attr('class')

    编辑(回复评论):

    var classes = $(selectedElement).attr('class'),
        iconIndex = classes.indexOf('icon_'),
        iconIndex2 = classes.indexOf(' ', iconIndex),
        theClassName = classes.slice(iconIndex, (iconIndex2 > -1) ? iconIndex2 : undefined)
    

    API 文档:eachattr

    【讨论】:

    • 但是所选元素上有 2 个类。我只想要以 icon_ 开头的类名。
    • 迟到了(我的脑痛^^);) 比循环遍历类名更好的是 indexOf 和 slice 的组合 - 这应该可以完成工作:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 2012-05-21
    • 2011-08-26
    • 1970-01-01
    • 2011-03-29
    相关资源
    最近更新 更多