如何获取另一个元素的elementByClassName? (试图获得title
和author
)
<div class="post">
<div class="top">
<div class="title">Title 1</div>
</div>
<div class="bottom">
<div class="author">Author 1</div>
</div>
</div>
我的代码获取了posts
的列表:
var list = document.getElementsByClassName("post");
我怎样才能得到title
和author
假设我不能只创建两个类列表。
list.getElementsByClassName("top").getElementsByClassName("title");
^^这不起作用,因为list
是一个元素。
答案 0 :(得分:2)
这不起作用,因为list是一个元素。
不,如果list
是一个元素,将工作。它不起作用,因为list
是元素的集合。
list[0]
是一个元素:
list[0].getElementsByClassName("top")
但我建议使用querySelector
/ querySelectorAll
insetad,它允许您使用全范围的CSS选择器(甚至可以在没有getElementsByClassName
的IE8上工作)。
var list = document.querySelectorAll(".post");
例如,这会列出每个帖子的title
和author
:
Array.from(document.querySelectorAll(".post")).forEach(function(post) {
var title = post.querySelector(".title").innerHTML;
var author = post.querySelector(".author").innerHTML;
// ...
});
(Array.from
是ES2015的内容,但可以是polyfilled。Array#forEach
是ES5的内容,但如果需要,可以为IE8等真正过时的浏览器进行填充。)
答案 1 :(得分:1)
您可以迭代getElementsByClassName
返回的HTMLCollection中的元素,在每个元素上调用getElementsByClassName
并将结果推送到数组。
var elements = [];
[].forEach.call(document.getElementsByClassName("post"), function(el) {
[].push.apply(elements, el.getElementsByClassName("title"));
[].push.apply(elements, el.getElementsByClassName("author"));
});
但最好使用querySelectorAll
:
var elements = document.querySelectorAll(".post .title, .post .author");