[英]Convert array to comma separated strings
classList
的add
方法只接受字符串而不接受數組( String [, String [, ...]]
)所以我想知道是否有一種優雅的方法可以將數組轉換為字符串列表而沒有明顯的循環:
var breakpoints = {
"extraSmall" : [ "only screen and (max-width: 575px)" ],
"small" : [ "only screen and (min-width: 576px) and (max-width: 767px)" ],
"medium" : [ "only screen and (min-width: 768px) and (max-width: 991px)" ],
"large" : [ "only screen and (min-width: 992px) and (max-width: 1199px)" ],
"extraLarge" : [ "only screen and (min-width: 1200px)" ],
}
Object.keys(breakpoints).map(feature => document.documentElement.classList.add(feature));
基本上,我希望在一次調用中添加多個類。
由於您不想創建新數組,因此請勿使用.map
。 相反,您想要執行副作用,因此您應該使用forEach
或for
循環:
for (const newClass of Object.keys(breakpoints)) {
document.documentElement.classList.add(newClass)
}
為了避免完全循環,您可以(不雅地)與現有的className
連接:
document.documentElement.className += ` ${Object.keys(breakpoints).join(' ')}`;
如果<html>
標記還沒有 class 名稱,則不需要前導空格。 如果事先不確定它是否具有 class 名稱,則改用classList.add
會更容易。
由於add
方法接受多個類作為參數,您可以在 object 鍵上使用擴展語法...
將鍵中的每個元素作為 class 傳遞。
var breakpoints = { "extraSmall": [ "only screen and (max-width: 575px)" ], "small": [ "only screen and (min-width: 576px) and (max-width: 767px)" ], "medium": [ "only screen and (min-width: 768px) and (max-width: 991px)" ], "large": [ "only screen and (min-width: 992px) and (max-width: 1199px)" ], "extraLarge": [ "only screen and (min-width: 1200px)" ],} const div = document.querySelector('div'); const classes = Object.keys(breakpoints); div.classList.add(...classes);
<div>Div</div>
對於不支持擴展語法的舊版本瀏覽器,您可以使用apply
方法。
var breakpoints = { "extraSmall": [ "only screen and (max-width: 575px)" ], "small": [ "only screen and (min-width: 576px) and (max-width: 767px)" ], "medium": [ "only screen and (min-width: 768px) and (max-width: 991px)" ], "large": [ "only screen and (min-width: 992px) and (max-width: 1199px)" ], "extraLarge": [ "only screen and (min-width: 1200px)" ],} const div = document.querySelector('div'); const classes = Object.keys(breakpoints); div.classList.add.apply(div.classList, classes)
<div>Div</div>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.