`querySelectorAll` - 使用数据选择器查询时返回空值

Posted

技术标签:

【中文标题】`querySelectorAll` - 使用数据选择器查询时返回空值【英文标题】:`querySelectorAll` - returns null value on query with data selector 【发布时间】:2021-11-30 17:32:00 【问题描述】:

在我的角度指令中,我试图通过data-xxx 值选择元素。但将0 作为长度。

有人帮我理解这个问题吗?

directive.ts:

import 
  Directive,
  OnInit,
  HostListener,
  ElementRef,
  AfterContentChecked,
 from '@angular/core';

@Directive(
  selector: '[autoFocus]',
)
export class AutoFocusDirective implements AfterContentChecked 
  @HostListener('document:keydown', ['$event']) public onKeyUp = ($event) => 
    console.log($event.target);
  ;

  constructor(private el: ElementRef<htmlElement>) 

  ngAfterContentChecked() 
    this.onFindingTree(this.el.nativeElement);
  

  onFindingTree(parent) 
    const focusable = parent.querySelectorAll(`[focus=true]`);
    console.log(focusable.length);
  

html:

<div autoFocus>
  <ul>
    <li [attr.data-focus]="true" tabindex="0">1</li>
    <li [attr.data-focus]="true" tabindex="0">
      2
      <ul>
        <li tabindex="0">001</li>
        <li tabindex="0">002</li>
      </ul>
    </li>
    <li tabindex="0">3</li>
  </ul>
</div>

Live Demo

【问题讨论】:

【参考方案1】:

像这样更新你的选择器:

onFindingTree(parent) 
    const focusable = parent.querySelectorAll('[data-focus=true]');
    console.log(focusable.length);

【讨论】:

以上是关于`querySelectorAll` - 使用数据选择器查询时返回空值的主要内容,如果未能解决你的问题,请参考以下文章

在动态添加的元素上使用 querySelectorAll

使用 querySelectorAll()。方法返回的结果是不是有序?

在 Typescript 中,如何使用扩展语法为 querySelectorAll 设置类型

Puppeteer:使用page.querySelectorAll()不是一个函数

querySelectorAll( ) 方法

HTML 表上的“querySelectorAll”未按预期工作