【发布时间】:2018-04-16 07:50:54
【问题描述】:
我正在尝试仅使用 vanilla JS 创建一个函数,该函数将调整具有给定类的容器中的字体大小。找到this demo,这似乎可以解决问题。不幸的是,他们的“Javascript”版本实际上使用 $() jquery 选择器来定位 DOM 中的特定元素,基于其元素类型和类。
由于 vanilla JS 不允许这样做,我不确定如何应用该解决方案。
逻辑让我感到困惑,我需要准确定位元素,并且可能具有相同类的同一元素的多个实例,所有这些实例都需要单独处理。
即我可能有两个附加了“.resize”类的 h3 元素,但第一个元素是 50 像素 x 100 像素,第二个元素是 200 像素 x 400 像素。如果我只是简单地应用基于通用元素类型和类的解决方案,那么为第二个元素生成的 css 规则也将应用于第一个元素。
我能想到的唯一方法是为每个元素使用唯一 ID 而不是“.replace”类,然后创建一个包含预定义 ID 的数组并遍历该数组以定位每个元素。该解决方案既不优雅也不可扩展。
我已经修改了函数以仅使用 vanilla JS 来定位 .style.fontSize 属性,但现在我得到了一个无限循环。
JS:
function autoSize () {
var el, elements, _i, _len, _results;
elements = document.getElementsByClassName('resize');
console.log(elements);
if (elements.length < 0) {
return;
}
_results = [];
for (_i = 0, _len = elements.length; _i < _len; _i++) {
el = elements[_i];
_results.push((function(el) {
var resizeText, _results1;
resizeText = function() {
var elOldFontSize = el.style.fontSize;
var elNewFontSize;
elNewFontSize = (parseInt(elOldFontSize.slice(0, -2)) - 1) + 'px';
el.style.fontSize = elNewFontSize;
};
_results1 = [];
while (el.scrollHeight > el.offsetHeight) {
_results1.push(resizeText());
}
return _results1;
})(el));
}
return _results;
}
【问题讨论】:
标签: javascript html css dynamic getelementsbytagname