如何從元素中移除除某些類以外的所有類。我假設我們不能使用removeClass()
。假設我有一個<div class="aa bb cc dd ee ff"></div>
,我想刪除除aa dd
之外的所有類。我怎樣才能做到這一點。jQuery removeClass()但不是某些類
回答
你爲什麼不只是替換想要像這樣
$('#yourElement').attr('class',"aa dd");
您可以刪除所有,並添加需要的人回到:
$('#divID').removeClass()
.addClass('aa dd'); // add multiple classes by separating with space
注:調用removeClass()
不指定特定的類名中刪除所有的類。
這假定aa和dd都存在於原始文件中。只保留它們需要更多的工作(只是檢查哪些在那裏,並且只有在它們以前存在時才加回來。) –
@DanDaviesBrackett:的確如此,這就是OP的示例代碼所顯示的內容:)勞倫斯的答案雖然很明智。 – Sarfraz
同意,除非OP增加額外的要求,以保持,如果只是已經存在... –
的一種方式,你可以做到這一點是僅僅覆蓋所有教學班,你想對類(ES)的類的類屬性保持。所以,如果您的div有「myDiv」的ID,那麼你可以做:
$('#myDiv').attr('class', 'aa dd');
如果你知道你要保持你可以重新添加(如其他已經顯示)哪些類。
我假設,雖然它現在還不知道是否已經應用了這些課程,所以我就買了一步:
var keep = ['aa','bb'], // list we'd like to keep
reAdd = [], // ones that should be re-added if found
$el = = $(el); // element we're working on
// look for which we re-add (based on them already existing)
for (var c = 0; c < keep.length; c++){
if ($el.hasClass(keep[c])) reAdd.push(keep[c]);
}
// drop all, and only add those confirmed as existing
$el
.removeClass() // remove existing classes
.addClass(reAdd.join(' ')); // re-add the confirmed ones
爲了使它乾淨了一點,你可以創建一個小的擴展。
jQuery.fn.removeClassExcept = function (val) {
return this.each(function() {
$(this).removeClass().addClass(val);
});
};
然後,你可以使用它像
$("selector").removeClassExcept("aa dd");
這裏有一個例子:http://jsfiddle.net/9xhND/
UPDATE
使用布拉德·克里斯蒂的邏輯,更新將現只存的是原本存在的類而不是添加新的類。 http://jsfiddle.net/9xhND/1/
jQuery.fn.removeClassExcept = function (val) {
return this.each(function (index, el) {
var keep = val.split(" "), // list we'd like to keep
reAdd = [], // ones that should be re-added if found
$el = $(el); // element we're working on
// look for which we re-add (based on them already existing)
for (var c = 0; c < keep.length; c++){
if ($el.hasClass(keep[c])) reAdd.push(keep[c]);
}
// drop all, and only add those confirmed as existing
$el
.removeClass() // remove existing classes
.addClass(reAdd.join(' ')); // re-add the confirmed ones
});
};
這個插件與我的邏輯混合將是完美的解決方案。我擔心''div class =「a b c d f」>'和'$('div')。removeClassExcept('d e')'會添加永遠不存在的e類。 –
你說得對。如果以前不存在,則會添加「e」。對於op的情況可能並不重要。我將添加一個更新以使兩個版本都可用。 –
.removeClass()
接受作爲參數,將返回哪些類實際刪除功能..
所以
$('div').removeClass(function(i, class){
// variable class hold the current value of the class attribute
var list = class.split(' '); // we create an array with the classes
return list.filter(function(val){ // here we remove the classes we want to keep
return (val != 'aa' && val != 'dd');
}).join(' '); // and return that list as a string which indicates the classes to be removed..
});
我喜歡這個解決方案。比刪除所有課程更漂亮。 –
@Benoît大多數情況下,最簡單的答案總是最好的答案....親吻! –
@Laurence Burke:是的,但在你的解決方案中,如果只有一個類,它會添加dd! –
的jQuery實際上提供了一個回調參數的removeClass方法,讓你可以使用一個簡單的JavaScript正則表達式來返回除了你不想刪除的類以外的所有類:
$('#myDiv').removeClass(function() {
return $(this).attr('class').replace(/aa|bb/g, '');
});
這樣,如果它們不存在,就不要添加類'aa'和'bb'。
你可以看到它在這裏的行動:http://jsfiddle.net/sr86u/3/
- 1. jQuery選擇類但不是某些數據屬性
- 2. removeClass()刪除類,但jQuery的記住它
- 3. 的jQuery removeClass不是在IE
- 4. Dictionary.ElementAt方法在某些類中可見,但不是其他類。
- 5. jQuery的:removeClass當類是條件
- 6. jquery removeClass不工作
- 7. jQuery不允許removeClass
- 8. jQuery的類名和removeClass不工作
- 9. NServiceBus爲某些消息類型指定BinarySerializer,但不是全部
- 10. Magento:某些類別的標題,但不是全部
- 11. boost :: apply_visitor不是[某些]類的成員
- 12. D3JS刪除類似JQuery removeClass()的類?
- 13. jQuery的 - .removeClass不起作用
- 14. jQuery removeClass似乎不工作
- 15. jquery keyup removeClass不起作用
- 16. jQuery - removeClass工作不正常
- 17. jQuery addClass()/ removeClass()不工作
- 18. Jquery - addClass和removeClass不工作
- 19. Jquery .addClass和.removeClass不工作?
- 20. jquery removeClass似乎不工作
- 21. removeClass方法不工作jquery
- 22. jQuery .removeClass()不起作用
- 23. jquery addClass/removeClass不工作
- 24. 的jQuery removeClass不刪除
- 25. jQuery的.removeClass不工作setTimeout
- 26. jQuery的removeClass不工作
- 27. jquery addClass()removeClass()後不工作
- 28. Jquery的removeClass不起作用
- 29. jQuery removeClass和addClass不工作
- 30. 對某些庫使用-all_load,但對某些庫不使用
爲什麼認爲不能用'不:' – GusDeCooL
不僅僅是設置類'「AA DD」'夠了嗎? – alf
@pinkie這些答案有幫助嗎? –