2012-11-27 20 views
3

問題是關於jQuery。用掩碼更改類名? (jQuery)

什麼是尋找所有類似superclass-XXXXX,其中XXXXX是一個數字(任何整數)在頁面上將每個這樣的類更改爲superclass-XXXXX-finished

例如,如果頁面上有superclass-12345superclass-34類,它們將變爲superclass-12345-finishedsuperclass-34-finished

回答

2

此作品:

function f() { 
    $("[class]").each(function() { 
     this.className = this.className.replace(/(super-\d+)(-finished)?/, function(a, b, c) { 
      if (c == "") { 
       return a + "-finished"; 
      } 
      return a; 
     }); 
    }); 
} 


f(); 
f(); 
f(); 

console.log($("[class]").map(function() { 
    return this.className; 
})); 

這將取代次數的super-<some digits>super-<same digits>-finished,即使你有一個單獨的元素很多這樣的課程。

輸入:

<div class="super-11"></div> 
<div class="super-not-11"></div> 
<div class="yes-super-111"></div> 

輸出:

<div class="super-11-finished"></div> 
<div class="super-not-11"></div> 
<div class="yes-super-111-finished"></div> 

http://jsfiddle.net/9RFn4/1

編輯:更新以濾除其中的類一端與-finished

+0

看起來像它的戰車。我發現的唯一問題是: 超級11成爲超級11完成(完美!),並且在相同的事件中,超級11完成。有什麼選擇來防止這件事?我相信/超 - (\ d +)/應該改變,所以它只發現一次。無論如何感謝! – Haradzieniec

+0

對不起,我犯了一個錯字:super-11 - > super-11-finished - > super-11-finished-finished - > super-11-finished-finished-finished ... – Haradzieniec

+0

@Haradzieniec,檢查我的編輯。 – Dogbert

1

查找所有的人都開始用超是這樣的:

$('*[class^="superclass"]') 

然後改變與超開始的所有類,一類新的名字:

$('*[class^="superclass"]').attr('class', 'newClass'); 
+0

這將不匹配具有多個類的元素,除非'superclass-XXXXX'類是第一個在HTML中指定的類。不確定是否需要處理具有多個類的元素,但需要考慮。 –

1

假設你的元素有隻是一個單一的superclass-*

$('*[class^="superclass"]').prop('class', $(this).prop('class') + '-finished');