Jquery 编辑 css 字体系列值
Jquery to edit css font-family values
我正在尝试编写一个用户脚本,如果它们属于 ['arial'、'verdana'、'open sans'] 等用户定义的列表,则从字体系列中删除这些值。
原文:font-family: Arial, Verdana, "Segoe UI", sans-serif;
修改:font-family: "Segoe UI", sans-serif;
使用 jquery,是否有一种有效的方法来删除一些匹配值,或者我是否必须在每个属性上使用带有正则表达式的 replace() 方法?
此外,一些网站将字体系列值存储在一些其他变量中,例如 --ff-sans
、--ff-serif
等。所以我也想编辑这些变量的值。
- 使用 getComputedStyle 及其
getPropertyValue
方法获取您的当前样式(“font-family”)
- 使用
querySelectorAll()
获取与提供的选择器匹配的所需元素(我使用 "body *:not(script):not(style)"
)
// Utility functions
const ELS = (sel, EL) => (EL || document).querySelectorAll(sel);
const getStyle = (EL, prop) => getComputedStyle(EL, null).getPropertyValue(prop);
const matchesSome = (str, arr) => arr.some(x => str.toLowerCase().includes(x.toLowerCase()));
// Define your array of desides matches and replacement:
const fontFamilyMatches = ["arial", "verdana", "open sans"];
const fontFamilyReplace = `"Segoe UI", sans-serif`;
// Get all elelemts inside body
const ELS_all = ELS("body *:not(script):not(style)");
// Replace fonts that match one in the fontFamilyMatches Array
// with the one defined in fontFamilyReplace
ELS_all.forEach(EL => {
const fontFamily = getStyle(EL, "font-family");
if (matchesSome(fontFamily, fontFamilyMatches)) {
EL.style.fontFamily = fontFamilyReplace
}
});
h1,
h2 {
font-family: "Open Sans", sans-serif;
}
p {
font-family: Arial, Verdana, "Segoe UI", sans-serif;
}
blockquote {
font-family: 'Bookman Old Style', serif;
}
span {
font-family: Verdana, Geneva, sans-serif;
}
<h1>Lorem ipsum</h1>
<div>
Lorem ipsum dolor sit amet.
<p>
Consectetur adipisicing elit.<br> In reiciendis delectus saepe hic.
</p>
</div>
<p>
<span>tempora tempore recusandae molestiae!</span> atque sint dolor a! Id quae rem consequatur deleniti autem, <span>aliquid consectetur</span> adipisicing elit. Dicta iusto corporis dolor.
</p>
<h2>Dolor sit amet</h2>
<p>
ullam eius dignissimos sequi ut.
</p>
<blockquote>
Lorem ipsum dolor sit amet
</blockquote>
我正在尝试编写一个用户脚本,如果它们属于 ['arial'、'verdana'、'open sans'] 等用户定义的列表,则从字体系列中删除这些值。
原文:font-family: Arial, Verdana, "Segoe UI", sans-serif;
修改:font-family: "Segoe UI", sans-serif;
使用 jquery,是否有一种有效的方法来删除一些匹配值,或者我是否必须在每个属性上使用带有正则表达式的 replace() 方法?
此外,一些网站将字体系列值存储在一些其他变量中,例如 --ff-sans
、--ff-serif
等。所以我也想编辑这些变量的值。
- 使用 getComputedStyle 及其
getPropertyValue
方法获取您的当前样式(“font-family”) - 使用
querySelectorAll()
获取与提供的选择器匹配的所需元素(我使用"body *:not(script):not(style)"
)
// Utility functions
const ELS = (sel, EL) => (EL || document).querySelectorAll(sel);
const getStyle = (EL, prop) => getComputedStyle(EL, null).getPropertyValue(prop);
const matchesSome = (str, arr) => arr.some(x => str.toLowerCase().includes(x.toLowerCase()));
// Define your array of desides matches and replacement:
const fontFamilyMatches = ["arial", "verdana", "open sans"];
const fontFamilyReplace = `"Segoe UI", sans-serif`;
// Get all elelemts inside body
const ELS_all = ELS("body *:not(script):not(style)");
// Replace fonts that match one in the fontFamilyMatches Array
// with the one defined in fontFamilyReplace
ELS_all.forEach(EL => {
const fontFamily = getStyle(EL, "font-family");
if (matchesSome(fontFamily, fontFamilyMatches)) {
EL.style.fontFamily = fontFamilyReplace
}
});
h1,
h2 {
font-family: "Open Sans", sans-serif;
}
p {
font-family: Arial, Verdana, "Segoe UI", sans-serif;
}
blockquote {
font-family: 'Bookman Old Style', serif;
}
span {
font-family: Verdana, Geneva, sans-serif;
}
<h1>Lorem ipsum</h1>
<div>
Lorem ipsum dolor sit amet.
<p>
Consectetur adipisicing elit.<br> In reiciendis delectus saepe hic.
</p>
</div>
<p>
<span>tempora tempore recusandae molestiae!</span> atque sint dolor a! Id quae rem consequatur deleniti autem, <span>aliquid consectetur</span> adipisicing elit. Dicta iusto corporis dolor.
</p>
<h2>Dolor sit amet</h2>
<p>
ullam eius dignissimos sequi ut.
</p>
<blockquote>
Lorem ipsum dolor sit amet
</blockquote>