原文: https://blog.mrfrontend.org/2017/10/2-ways-get-child-elements-javascript/

Along the lines of other frameworks such as jQuery or Prototype, shortening the "querySelector" name can be convenient:

function $ (selector, el) {
if (!el) {el = document;}
return el.querySelector(selector);
}
function $$ (selector, el) {
if (!el) {el = document;}
return el.querySelectorAll(selector);
// Note: the returned object is a NodeList.
// If you'd like to convert it to a Array for convenience, use this instead:
// return Array.prototype.slice.call(el.querySelectorAll(selector));
}
alert($('#myID').id);

  

--------------------------------------------------------------------------------

In jQuery, it is super easy to get the child elements of a parent HTML element. But do you know how it works with Vanilla JavaScript?

Today I want to show you 2 ways how you can use Vanilla JavaScript to get the child elements, even when you don’t know what’s in the parent element.

If you like reading instead of watching a video? Please scroll down to continue reading.

Looking for the video resources? Scroll to the bottom!

Let’s start with a simple webshop page.

HTML

<header class="product__list-header">
<h2>Webshop</h2>
</header>
<section class="product__list">
<div class="product__item">
<img src="http://lorempixel.com/400/200/food" class="product__image" alt="Food">
<span class="product__price">500</span>
</div>
<div class="product__item fun__class">
<img src="https://lorempixel.com/400/200/food" class="product__image" alt="Food">
<span class="product__price">500</span>
</div>
<div class="product__item">
<img src="https://lorempixel.com/400/200/food" class="product__image" alt="Food">
<span class="product__price">500</span>
</div>
<div class="product__item">
<img src="https://lorempixel.com/400/200/food" class="product__image" alt="Food">
<span class="product__price">500</span>
</div>
<div class="product__item">
<img src="https://lorempixel.com/400/200/food" class="product__image" alt="Food">
<span class="product__price">500</span>
</div>
</section>

As you noticed, I used BEM as naming convention for my webshop example page.

#1 element.children

The first way to get the child elements is with the element.children. If you want to check out what kind of properties the DOM Element Object has for you, check it on W3schools. That is btw one of my favorite websites to check JavaScript example’s & documentation.

JavaScript

var productList = document.querySelector('.product__list').children;
console.log('productList: ', productList);

In the console log, you will find a.HTMLCollection Check the property__proto__, you will find out that he is not an Array.

Loop over the children

The children property will return a.HTMLCollection So you can loop over it with the plain-old For-loop.

for (i = 0; i < productList.length; i++) {
console.log('productList[i]: ', productList[i]);
}

Check my element.children jsbin example.

#2 document.querySelectorAll

If you know which elements are in a parent element, you can adjust the selector to:..product__list .product__item With this selector, you target al the product items inside the product list.

If you don’t know which elements are in the parent element, I would recommend the element.children way. Because then you will definitely get all the children back.

Maybe you remind the querySelectorAll from my previous blog post, but I don’t mind to show it again   .

JavaScript

var productList = document.querySelectorAll('.product__list .product__item');
console.log('productList: ', productList);

In the console log, you will find a NodeList. If you check the __proto__ you will find out that he is not an Array.

Just like the HTMLCollection, you can use the For-loop to loop over each element in the NodeList.

for (i = 0; i < productList.length; i++) {
console.log('product: ', productList[i]);
}

Check my querySelectorAll jsbin example.

Conclusion: element.children VS querySelectorAll

But now is the question, which one do you use?

You know the child elements

In the case you know what child elements there are in the parent element, it is good to use the document.querySelectorAll method.

This a much faster way to target them with the CSS selector. And because of the, querySelectorAll it doesn’t matter how much elements there are.

You don’t know the child elements

In the case you don’t know what child elements you can expect, you need the. element.children All the elements inside the parent element will come back with the DOM Element Object.

JavaScript basics: 2 ways to get child elements with JavaScript的更多相关文章

  1. 3 Ways to Preload Images with CSS, JavaScript, or Ajax---reference

    Preloading images is a great way to improve the user experience. When images are preloaded in the br ...

  2. 深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点

    深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 2011-12-28 23:00 by 汤姆大叔, 139489 阅读, 119 评论, 收藏, 编辑 才华横溢的 ...

  3. JavaScript高级程序设计(二):在HTML中使用JavaScript

    一.使用<script>元素 1.<script>元素定义了6个属性: async:可选.表示应该立即下载脚本,但不应该妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本 ...

  4. JavaScript学习总结(四)——this、原型链、javascript面向对象

    一.this 在JavaScript中this表示:谁调用当前函数this就指向谁,不知道调用者时this指向window. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是 ...

  5. JS事件 什么是事件?JavaScript 创建动态页面。事件是可以被 JavaScript 侦测到的行为。 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件。

    什么是事件 JavaScript 创建动态页面.事件是可以被 JavaScript 侦测到的行为. 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件. 比如说,当用户单击 ...

  6. 《JavaScript高级程序设计》——第二章在HTML使用JavaScript

    这章讲的是JavaScript在HTML中的使用,也就是<script>元素的属性.书中详细讲了async.defer.src和type四个<script>的属性. 下面是对第 ...

  7. 7 JavaScript Basics Many Developers Aren't Using (Properly)【转】

    JavaScript, at its base, is a simple language that we continue to evolve with intelligent, flexible ...

  8. [HTML5] Add an SVG Image to a Webpage and Get a Reference to the Internal Elements in JavaScript

    We want to show an SVG avatar of the patio11bot, so we'll do that in three ways: Using an img tag - ...

  9. Deleting array elements in JavaScript - delete vs splice

    javascript 数组中删除元素用 array.splice(start, deleteCount);这个方法. ----------------------------------------- ...

随机推荐

  1. ARM-Linux (临时,正式) 建立页表的比较【转】

    转自:http://blog.csdn.net/edwardlulinux/article/details/38967521 版权声明:本文为博主原创文章,未经博主允许不得转载.   很久没有写博客了 ...

  2. boost::bind的简单实现

    前言 在上一篇blog中简单的实现了boost::function,支持带有2个参数的函数/函数指针,函数对象,函数适配器/bind类,以及带有1个参数的成员函数指针. 本文接着来介绍如何实现一个简单 ...

  3. 【转】Spring MVC 解读——<mvc:annotation-driven/>

    转载自:http://my.oschina.net/HeliosFly/blog/205343 一.AnnotationDrivenBeanDefinitionParser 通常如果我们希望通过注解的 ...

  4. xshell命令大全

    suse linux 常用命令 (1)命令ls——列出文件 ls -la 给出当前目录下所有文件的一个长列表,包括以句点开头的“隐藏”文件 ls a* 列出当前目录下以字母a开头的所有文件 ls -l ...

  5. WPF第三方控件盘点

    WPF统一的编程模型.语言和框架,实现了界面设计人员和开发人员工作可以分离的境界,鉴于WPF强大的优势,且一直是开发者关注的地方,下面和大家分享基于WPF项目开发需要用到的第三方控件,包括业界最受好评 ...

  6. Selenium2+python自动化48-登录方法(参数化)【转载】

    前言 登录这个场景在写用例的时候经常会有,我们可以把登录封装成一个方法,然后把账号和密码参数化,这样以后用的登录的时候,只需调用这个方法就行了 一.登录方法 1.把输入账号.输入密码.点击登录按钮三个 ...

  7. KVM(一)简介及安装

    1. KVM 介绍 1.0 虚拟化简史 其中,KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),它是一个 Linux 的一个内核模块,该内核模块使得 Lin ...

  8. mysql:functional dependency

    0down vote First, a functional dependency in the form A->B means that, given one value for A, we ...

  9. 学习PHPCMS需要掌握的函数

    路径:phpcms\libs\classes\model.class.php /** * 执行sql查询 * @param $where 查询条件[例`name`='$name'] * @param ...

  10. HDU 2045 LELE的RPG难题(递推)

    不容易系列之(3)—— LELE的RPG难题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...