[英]Angular2+ using .getElementsByClassName() returns empty selection though existent
我可能有一个相当简单的问题,但我找不到答案。 我也搜索过以前的问题,但似乎没有工作....
我在我的模板上有一个div
的大量文本角度,一些部分用一个span
包裹,那些有类突出显示 。 现在我只想在按下按钮时全部选择它们。 我需要所有的跨度并稍后与他们一起做。
我试过了:
const elm = (this.el as any).getElementsByClassName('.highlight');
console.log('elmens: ', elm);
for (let i = 0; i < elm.length; i++) {
console.log('HTML ELM: ', elm[i]);
}
还有:
const elm = document.getElementsByClassName('.highlight');
这两个都只返回一个空的选择,虽然它们存在。 我甚至在浏览器控制台上尝试过它。 我知道我可以使用jQuery,但我不想将它包含在这么简单的任务中。
也许你知道我做错了什么???
我在用:
我希望避免在角度框架中使用这种技术,因为不建议以这种方式与DOM交互。 他们有适当的选择。 与DOM交互可能会引入性能影响并且是不好的做法。
相反,你可以考虑使用@viewchildren
来解决这个问题。 文档在这里
这将表明你想获得每个元素,你的情况spans
<span #myNewId>text</span>
<span #myNewId>text snippet 2</span>
可以通过以下方式在控制器中访问
@ViewChildren('myNewId')public mySpans: ElementRef;
这应该为您提供所有相同的功能,而无需直接与DOM交互。 然后mySpans
将是一个标有#myNewID
的跨度数组。
这也应该允许您访问与您的问题有关的元素,因为它们绑定了类中的变量。
我会用:
const elements= (<HTMLCollection>document.getElementsByClassName('your_class_name_without_dot'));
console.log(elements)
也许您的子视图未初始化,并且在元素呈现给浏览器之前尝试使用DOM。 尝试使用Angular钩子,然后调用代码。 喜欢
ngAfterViewChecked() {
...
const elm = (this.el as any).getElementsByClassName('.highlight');
console.log('elmens: ', elm);
for (let i = 0; i < elm.length; i++) {
console.log('HTML ELM: ', elm[i]);
}
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.