2013-08-06 48 views
1

我該怎麼做:Javascript/jQuery:選擇包含單詞的類名稱

我有一個有多個類的對象。我的目標是獲取包含字符串(例如'toaster')的類名(或者以該字符串開始)並將其放入變量中。注意,我只知道類名的開始,並且需要獲取整個字符串。

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

我有這個div作爲我的jQuery對象,我只需要將類名稱toaster-maker置於變量className;

再次,我不需要選擇對象!我只需要將類名稱放入變量中。

+0

這個班級是否總是寫成最後一班? – Spokey

+0

不,它不會 – vlad

回答

5

因此,假設你已經有一個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+/), ...)

+0

函數(名稱)應該是函數(鍵,名稱)。否則,您將使用索引作爲字符串 – Spokey

+0

謝謝! jQuery混淆回調參數順序的另一個受害者;) –

+0

是的,它的工作原理,謝謝 – vlad

2

試試這個,

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作爲數組並將匹配的類名稱推送給它。

3

正則表達式似乎在這裏更高效:

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

返回包含「烤麪包機」(或一個空數組,如果是沒有的)所有類名。

+0

也像一個魅力,感謝這種方法 – vlad

相關問題