繁体   English   中英

Vanilla JS:如何按类型和类来定位元素

[英]Vanilla JS: How to target element by type and class

我试图只使用vanilla JS创建一个函数,它将调整具有给定类的容器中的字体。 发现这个演示 ,好像它会成功。 不幸的是,他们的'Javascript'版本实际上使用$()jquery选择器来根据其元素类型和类来定位DOM中的特定元素。

由于vanilla JS不允许这样做,我不确定如何应用解决方案。

逻辑让我感到困惑,我需要准确地定位元素,并且可能有相同元素的多个实例具有相同的类,所有这些都需要单独处理。

即我可能有两个h3元素附加'.resize'类,但第一个元素是50px乘100px,第二个元素是200px乘400px。 如果我只是根据泛型元素类型和类应用解决方案,那么为第二个元素生成的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;
}

Vanilla JS不允许这样做,但浏览器风味的Vanilla JS确实如此。 它被称为document.querySelectordocs )和document.querySelectorAlldocs )。

文档中的示例:

在此示例中,返回文档中具有类“myclass”的第一个元素:

var el = document.querySelector(".myclass");

此示例返回文档中所有div元素的列表,其中包含“note”或“alert”类:

var matches = document.querySelectorAll("div.note, div.alert");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM