javascript - 我们如何转换 jQuery remove class from parent in VanillaJS

标签 javascript jquery

我只是尝试将 jQuery 方法转换为 VanillaJS,如下所示。

jQuery:

elements.parent(".item").removeClass("item");

Vanilla :

var parent = elements.parentNode;
parent.querySelector(".item").classList.remove('item');

但 Vanilla 脚本的工作方式与 jQuery 不同。有人请提出任何更好的解决方案。

最佳答案

鉴于 elements 是复数,我假设它是一个集合,所以使用 .forEach()(这需要在旧版浏览器中进行修补,除非 elements 是实际的 Array)

elements.forEach(function(el) {
  el.parentNode.classList.remove("item");
});

请注意,您不需要仅过滤到 .item 元素。如果它没有类,它将是一个空操作。

另请注意,.querySelector 仅搜索后代。如果出于其他原因确实需要对类进行过滤,则可以使用 .matches

elements.forEach(function(el) {
  var par = el.parentNode;
  if (par.matches(".item")) {
    // Do work with the `.item` element
    par.classList.remove("item");
  }
});

如果 .item 类可能有多个祖先,则在嵌套循环中遍历这些祖先。

elements.forEach(function(el) {
  var par = el.parentNode;
  do {
    if (par.matches(".item")) {
      // Do work with the `.item` element
      par.classList.remove("item");
    }
  } while((par = par.parentNode));
});

如果您经常这样做,您可以创建一个辅助函数。

function ancestors(el, filter) {
  var res = [];
  var par = el.parentNode;
  do {
    if (!filter || par.matches(filter)) {
      res.push(par);
    }
  } while((par = par.parentNode));

  return res;
} 

那么就是这样了。

elements.forEach(function(el) {
  ancestors(el, ".item")
    .forEach(function(par) { par.classList.remove(".item"); });
});

关于javascript - 我们如何转换 jQuery remove class from parent in VanillaJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45785556/

相关文章:

javascript - 如何使用css制作曲线边框

javascript - 有没有办法使用 JavaScript 发送 CoAP 命令?

jQuery:追加到父级

php - 如何使 HTML 按钮的 onclick 事件随机触发两个不同功能之一?

php - 2 个使用 jQuery 或 Ajax 的自动完成/建议输入框,第二个框基于多个项目的第一个选择

javascript - 在按键事件中,Tab 键在 Firefox 中不起作用

javascript - 如何编辑js对象/函数

javascript - 如何在另一个父 div 中对齐不同宽度的 div?

javascript - 如何获取 JqWidgets 网格中所有未选择的行索引的列表

javascript - Angular2中组件属性变化的Observable