【问题标题】:Javascript / jQuery : Select class name that contains wordJavascript / jQuery:选择包含单词的类名
【发布时间】:2013-08-06 08:12:52
【问题描述】:

我该怎么做:

我有多个类的对象。我的目标是获取包含字符串(例如'toaster')的类名(或以该字符串开头)并将其放入变量中。请注意,我只知道类名的开头,我需要完整。

例如<div class="writer quite-good toaster-maker"></div>

我有这个 div 作为我的 jQuery 对象,我只需要将类名 toaster-maker 放在变量 className 中;

再次,我不需要选择对象!我只需要将类名放入变量中。

【问题讨论】:

  • 那门课会一直写成最后一门吗?

标签: javascript jquery class variables select


【解决方案1】:

这里的正则表达式似乎更有效:

classNames = div.attr("class").match(/[\w-]*toaster[\w-]*/g)

返回所有包含“toaster”的类名(如果没有,则返回一个空数组)。

【讨论】:

    【解决方案2】:

    因此,假设您已经有一个带有该 div 的 jQuery 对象,您可以获取 class 属性的值,将字符串拆分为类名,遍历它们并查看哪个包含 toaster

    var className = '';
    $.each($element.attr('class').split(/\s+/), function(i, name) {
        if (name.indexOf('toaster') > -1) { // or name.indexOf('toaster') === 0
            className = name;
            return false;
        }
    });
    

    jQuery 没有为此提供特定的功能。

    如果你有多个元素要提取类名,可以使用.map

    var classNames = $elements.map(function() {
        $.each(this.className.split(/\s+/), function(i, name) {
            if (name.indexOf('toaster') > -1) { // or name.indexOf('toaster') === 0
                return name;
            }
        });
    }).get();
    

    classNames 将是一个类名数组。

    在支持.classList的浏览器中,也可以使用$.each(this.classList, ...)代替$.each(this.className.split(/\s+/), ...)

    【讨论】:

    • function(name) 应该是 function(key, name)。否则,您将使用索引作为字符串
    • 谢谢! jQuery 令人困惑的回调参数顺序的另一个受害者 ;)
    【解决方案3】:

    试试这个,

    var names = $('[class*=toaster]').attr('class').split(' ');
    var className;
    $.each(names, function(){
    if (this.toLowerCase().indexOf("toaster") >= 0)
        className = this;
        })
    console.log(className);
    

    小提琴是here。您还可以将 className 作为数组并将匹配的类名推送到其中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 2015-08-16
      • 2012-01-25
      相关资源
      最近更新 更多