javascript - 在 forEach 中查找特定的 div

标签 javascript foreach

我想知道当 forEach 的回调不直接引用所需元素时如何选择子元素。

const $searchField = document.querySelectorAll('.js-search');

if ($searchField.length > 0) {
  $searchField.forEach(function($el) {
    // $el = .js-search
    $el.addEventListener('click', function(event) {
      $el.classList.add('is-active');
    });

    // Here, i need to target the input, not .js-search
    $el.addEventListener('keyup', function(event) {
      if ($el.value.length > 0) {
         $el.classList.add('is-active');
       } else {
         $el.classList.remove('is-active')
       }
    //});
  });
}

这里,$el 指的是父级 .js-search 所以显然 keyup 不能工作。我想确保选择输入,但我不确定如何正确选择。

演示可在 Codepen 上获得!

目标是在搜索完成时保持状态为事件状态(至少有 1 个字符)。

谢谢

最佳答案

只需选择子input.value,而不是$el.value :

const $searchField = document.querySelectorAll('.js-search');
$searchField.forEach(function($el) {
  // $el = .js-search
  $el.addEventListener('click', function() {
    $el.classList.add('is-active');
  });

  const input = $el.querySelector('input');
  input.addEventListener('keyup', function() {
    if (input.value.length > 0) {
       $el.classList.add('is-active');
     } else {
       $el.classList.remove('is-active')
     }
  });
});

请注意,如果您不想要,则不需要 if 检查 - 在空集合上调用 forEach 不会抛出错误,它只是不会'迭代任何东西。

您还可以考虑为 NodeList.prototype.forEach 添加一个 polyfill(如果您还没有这样做的话),因为旧版浏览器不支持它。 (或者,将集合转换为数组,或使用 Array.prototype.forEach.call)

有点基于意见,但不需要在变量名前加上前缀 $ - 这不是 PHP。通常,$ 前缀表示某物是 jQuery ($) 集合。如果您正在执行 DOM 操作,最好不要使用以 $ 开头的变量名,以免将来的代码读者感到困惑。

关于javascript - 在 forEach 中查找特定的 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56143562/

相关文章:

c# - LINQ 语句是否比 'foreach' 循环更快?

javascript - args.slice(1) 如何分隔传递给 PhantomJS 的参数和 forEach(function(arg, i)... function 来工作?

Java,为什么这个文本没有在直列中对齐?

javascript - 如何在运行时以编程方式启用/禁用 Firebug Lite?

javascript - 这个javascript代码结构的目的是什么?

javascript - react native textInput scrollView android

c#-4.0 - 设置 IEnumerable KeyValuePair

javascript - 如何使用函数调用代替循环跳转?

javascript - 变量在另一个 block 中也是可见的

php - 如何在 foreach 中使用多维数组?