我目前正致力于HTML utility。我想使用Javascript提取HTML代码中使用的字体系列。我发现这段正则表达式只能找到普通字体:
font-family\s*?:.*?(;|(?=""|'|;))
即font-family:Arial,Helvetica,sans-serif
我无法匹配以下字体系列:
font-family: 'Lucida Sans', 'Lucida Sans Unicode', 'Lucida Grande', sans-serif;
是否有任何方法可用于提取字体/字体系列?
答案 0 :(得分:2)
如果你正在使用jQuery,你可以:
$('#myElement').css('fontFamily');
或webkit解决方案:
var el = document.querySelector('#myElement');
window.getComputedStyle(el).fontFamily;
如果您仍计划匹配css / style定义等文本:
"font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif;".match(/font-family\s*?\:(.*)(?=;)/gi)
这是一个最简单的RegExp,但会按预期工作。
答案 1 :(得分:2)
非jQuery解决方案:
var element = document.getElementById('elementId'),
style = window.getComputedStyle(element),
top = style.getPropertyValue('font-family');
答案 2 :(得分:0)
您可以通过这个简单的脚本获取字体系列。
alert(document.getElementById("*** id name of your field******").style.fontFamily);
答案 3 :(得分:0)
最后我把它弄清楚了......
function demo(input,output) {
var div = document.createElement("div");
try {
div.innerHTML = input;
} catch (e) {
alert(e.message);
return;
}
// images
var images = div.getElementsByTagName("IMG");
//console.log(images);
// font-family
var fontfamily = [];
var ffstack = [div];
while (ffstack.length) {
var ff = ffstack.pop();
if (ff.style && ff.style.fontFamily) {
fontfamily.push(ff.style.fontFamily);
}
if (ff.childNodes) {
for (var i = 0; i < ff.childNodes.length; i++) {
ffstack.push(ff.childNodes[i]);
}
}
}
//console.log(fontfamily);
document.getElementById("resultBlock").style.display = "block";
var vArray = Duplicates(fontfamily);
var fontss = vArray.join("\n\n");
output.value =fontss;
}
function Duplicates(arr) {
var i,
lenn = arr.length,
out = [],
obj = {};
for (i = 0; i < lenn; i++) {
obj[arr[i]] = 0;
}
for (i in obj) {
out.push(i);
}
return out;
}