JavaScript basics: 2 ways to get child elements with JavaScript
原文: 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的更多相关文章
- 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 ...
- 深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点
深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 2011-12-28 23:00 by 汤姆大叔, 139489 阅读, 119 评论, 收藏, 编辑 才华横溢的 ...
- JavaScript高级程序设计(二):在HTML中使用JavaScript
一.使用<script>元素 1.<script>元素定义了6个属性: async:可选.表示应该立即下载脚本,但不应该妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本 ...
- JavaScript学习总结(四)——this、原型链、javascript面向对象
一.this 在JavaScript中this表示:谁调用当前函数this就指向谁,不知道调用者时this指向window. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是 ...
- JS事件 什么是事件?JavaScript 创建动态页面。事件是可以被 JavaScript 侦测到的行为。 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件。
什么是事件 JavaScript 创建动态页面.事件是可以被 JavaScript 侦测到的行为. 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件. 比如说,当用户单击 ...
- 《JavaScript高级程序设计》——第二章在HTML使用JavaScript
这章讲的是JavaScript在HTML中的使用,也就是<script>元素的属性.书中详细讲了async.defer.src和type四个<script>的属性. 下面是对第 ...
- 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 ...
- [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 - ...
- Deleting array elements in JavaScript - delete vs splice
javascript 数组中删除元素用 array.splice(start, deleteCount);这个方法. ----------------------------------------- ...
随机推荐
- 智联招聘的python岗位数据词云制作
# 根据传入的背景图片路径和词频字典.字体文件,生成指定名称的词云图片 def generate_word_cloud(img_bg_path, top_words_with_freq, font_p ...
- pm2笔记
概述 pm2是一个进程管理工具.使用pm2部署NodeJS服务可以轻松实现负载均衡. 指定用户启动 pm2启动时会指定一个PM2_HOME目录,作为存放日志文件.rpc.sock文件,默认情况下会PM ...
- Photoshop CC 2015
1.Ctrl 加 + -号实现放大缩小2.Ctrl+T 自由变换3.Ctrl+D 取消选区,再选择处理完后想要选中别的区域的话要取消之前选中的区域,要不然之前的区域一直都是选中状态4.F12 将文件恢 ...
- flask的插件
详情参考官方文档 组件一:flask-session 安装: pip install flask-session 使用方法:先导入 from flask_session import Sess ...
- 内存可见性,指令重排序,JIT。。。。。。从一个知乎问题谈起
在知乎上看到一个问题<java中volatile关键字的疑惑?>,引起了我的兴趣 问题是这样的: package com.cc.test.volatileTest; public clas ...
- Windows7 SP1旗舰版精简版最终版本
2016年6月9号,老毛子@lopatkin大神针对Win7 SP1旗舰版精简版进行了最终更新,此次主要是之前小问题的修复和调整.该版为Windows 7 SP1 简体中文旗舰版最新版,包含2016年 ...
- CSU七月校赛A
/*#include <iostream> #include<cstdio> #include<algorithm> #include<cstring> ...
- SPFA解决单源最短路径
SPFA(Shortest Path Faster Algorithm): 一:基本算法 在求解单源最短路径的时候,最经典的是 Dijkstra 算法,但是这个算法对于含有负权的图就无能为力了,而 B ...
- Codeforces 1039A. Timetable
题目地址:http://codeforces.com/problemset/problem/1039/A 题目的关键在于理清楚思路,然后代码就比较容易写了 对于每一个位置的bus,即对于每一个i(i& ...
- 线段树+扫描线【HDU1542】Atlantis
Description 给定一些二维空间上的矩形,求它们的面积并. 一道线段树+扫描线的板子题 然而即使我会打了,也不能灵活运用这种算法.QAQ 遇到题还是不太会. 但是这种板子题还是随随便便切的. ...