恭喜 codepen 复活 \(^∀^)メ(^∀^)ノ
终於可以透过实作来学习如何选取元素、操作 node,一起来制作敲可爱 Cookie Generator!
角色图片取用来源:CleanPNG
饼乾生成器的 html 结构如下,按钮的功能是用来绑定点击时的事件,而今天主要的 JavaScript Node 操作在cookieBox
元素内。
<h1>Cookie Generator</h1>
<!-- 按钮区 -->
<section>
<button id="add" onclick = "addCookie()">Add</button>
<button id="remove" onclick = "removeCookie()">Remove</button>
<button id="replace" onclick = "replaceCookie()">Replace</button>
<button id="insert" onclick = "insertCookie()">Insert</button>
</section>
<button id="clearAll" onclick = "clearAll()">ClearAll</button>
<!-- 用来放饼乾的地方 -->
<div id="cookieBox"></div>
document.createElement
设计想法:点击按钮
Add
时增加饼乾。
实作:
querySelector
选取。document.createElement('div')
语法可以建立一个 div 元素。creatElement
建立节点的方式,在浏览器上无法看见新建立的元素,须透过 appendChild
将元素放入指定生成的位置。cookieBox.appendChild()
语法,生成的饼乾都会成为 cookieBox 的子节点。const cookieBox = document.querySelector('#cookieBox');
function addCookie() {
let cookie = document.createElement('DIV');
cookieBox.appendChild(cookie);
}
document.removeElement
设计想法:点击
remove
按钮修除饼乾。
实作:
cookieBox
下的第一个子元素节点开始消除,透过 children
将 cookieBox 下的所有元素节点选起来,[0]
指定从第一个元素开始消除。补充:
childNodes
也可以选到子节点,但是是选到所有种类的子节点(text node...),而 children 是只选到子元素节点。
cookieBox.removeChild()
语法移除节点,removeChild
前放的是父节点,()
内放的是计画移除的子节点,若括号内的子节点不属於该元素或是不存在 DOM 内,会跳出错误讯息。function removeCookie() {
let deletedCookie = cookieBox.children[0];
cookieBox.removeChild(deletedCookie);
}
document.insertBefore
设计想法:点击按钮
insert
时在饼乾间穿插加入 elmo。
实作:
先创建 elmo 元素,一样使用document.createElement('img')
语法,这次建立成 img 元素。
img 元素要加上 src 属性引入 elmo 图片来源,使用 setAttribute
,语法可以在元素上增加属性,setAttribute(name, value)
括号内第一个参数放 html 标签内的属性名称 - src,第二个放属性内容 - elmo 图片 url,记得加上引号!
elmo 放的位置必须有参照的饼乾位置,由於要间隔着饼乾放入,透过每次 index +2
的方式达到交错,一开始从 饼乾[0]
前放,再从 饼乾[2]
前放...,将 i 的初始值设为 -2
饼乾 [0] - 饼乾[1] - 饼乾[2]
elmo[0] - 饼乾[1] - 饼乾[2]
elmo[0] - 饼乾[1] - elmo[2] - 饼乾[3]
elmo[0] - 饼乾[1] - elmo[2] - 饼乾[3] - elmo[4]
在 function 外设置一个参数 i
,每次点击时 i +=2
插入元素的语法为 insertBefore(newNode, referenceNode)
,第一个参数为新插入的元素 - elmo,第二个参数为参照的元素 - 饼乾。
最後,绑定点击按钮时会执行 insertCookie function ,就完成点击时有穿插在饼乾间的 elmo 啦~
let i = -2;
function insertCookie() {
let elmo = document.createElement('img');
elmo.setAttribute('src','elmo 图片');
let refCookie = cookieBox.children[(i += 2)];
cookieBox.insertBefore(elmo, refCookie);
}
document.replaceElement(newChildNode, oldChildNode)
设计想法:点击
replace
时将饼乾换成 Cookie Monster。
实作:
createElement
创建 img 元素。querySelector
选取 cookieBox 下的第一个 div 标签。replaceChild(newChildNode, oldChildNode)
,第一个参数放新元素 - cookie monster,第二个放被取代的元素 - 饼乾。function replaceCookie() {
let cookieMonster = document.createElement('IMG');
cookieMonster.setAttribute('src','cookie monster 图片');
let refCookie = cookieBox.querySelector('div');
cookieBox.replaceChild(cookieMonster, refCookie);
}
设计想法:点击
clearAll
清掉所有元素。
实作:
cookieBox.innerHTML = ''
清空 CookieBox 下所有节点-2
。function clearAll() {
cookieBox.innerHTML = '';
i = -2;
}
008天重新认识 JavaScript
JavaScript 技术手册
MDN
CleanPNG - Elmo, cookie, cookie monster 图片来源
Codepen 实作连结
透过实作的方式学习有趣多了,顺便复习 css,感谢神队友们的 support!
前面都在讲电控 对Raspberry pi似乎大材小用了 既然他有网路, 那就可以将感测器所计算出来...
理解机器学习的过程後,来实际理解它的演算法吧 :) 上篇所提到的Linear Model中最为基础的...
在程序语言中, 我们不只要掌握基本的语法, 还要去融会贯通, 掌握它的精随所在, 而物件导向正是C...
Sometimes PST files exceed the storage limit, whic...
嗨,我是 A Fei,来看看今天的题目: (题目来源:Codewars) Take the foll...