【问题标题】:How to target element by type and class如何按类型和类定位元素
【发布时间】: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


    【解决方案1】:

    Vanilla JS 不允许这样做,但浏览器风格的 Vanilla JS 可以。它被称为document.querySelector (docs) 和document.querySelectorAll (docs)。

    文档中的示例:

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

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

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

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

    【讨论】:

    • 好的,所以我仍然会遇到一个问题,即具有相同类型和类但大小不同的元素会同时被定位?在这种情况下,我想我必须改用 ID 选择器。谢谢!
    • querySelectorquerySelectorAll “浏览器风味的香草 JS” 而不是 “香草 JS?”
    • @hungerstar - Vanilla JS 基本上是 JS,没有浏览器添加到 window 对象的所有添加。 Vanilla JS 根本没有 window 对象。
    • 那里有点毛骨悚然。通常 "Vanilla JS" 表示没有像 jQuery 这样的框架/库。
    • @hungerstar,我明白你的意思,我同意,这只是为了指出 Vanilla JS 并不是每个人都认为的那样。虽然技术上正确的是纯 JS 没有浏览器或 Node.js 添加。
    猜你喜欢
    • 2022-01-15
    • 2019-04-20
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    相关资源
    最近更新 更多