本文首次发表在JavaScript in Plain English。
上第3部分:从基础架构到完成的应用程序
ThisisEngineering RAEng在Unsplash上的照片
目录
欢迎回来!
我们的时刻到了。现在,我们准备完成我们的应用程序,以 正则表达式开始:从理论到实践 。
。完成应用程序
我们在本教程的第2部分中删除了第6步,其中我们构建了应用程序的基础架构,提供了所有必要的数据结构和辅助功能。
剩下的两个步骤可以完成该应用程序:
1.我们需要对两个
使用的回调函数进行编码。
2。
步骤7.编码回调功能
让我们暂时考虑这些回调功能需要完成的工作。我们知道它们是将它们作为参数附加到两个事件侦听器的内容,一个在上聆听 验证邮政编码按钮,另一个在<强>重置按钮。
我们将在第2部分的结尾处准确地拿起您在代码中删除的位置。
对于验证邮政编码按钮,我们需要一个回调函数,该函数将与 no Match 的默认消息交换内容,并用填充其父有效邮政编码匹配的滚动窗口
populateResultBox()
功能
populateResultBox()
功能在入门代码中搜索读取的行:
// TO BE DONE: Code populateResultBox() callback function.
并将其替换为以下代码:
const populateResultBox = () => {
resultBox.classList.remove(‘default-result’);
resultBox.removeChild(‘placeHolder’);
resultBox.classList.add(‘custom-scrollbar’);
createParagraphText();
// Create paragraphs and set textContent only
// if not already created. Prevents doubling
// of result data if old paragraphs have not
// yet been garbage collected.
if (paragraphs.length === 0) {
createParagraphs();
}
// Append all result paragraphs to resultBox.
appendParagraphs(resultBox, paragraphs);
};
代码列表1. Populateresultbox()回调函数
在此功能中正在发生很多事情,尽管其中大部分在我们对辅助功能的讨论中都被分解了。尽管如此,这里仍然还有一些新概念。
前三行代码是对DOM的操纵,正如我们在本教程中以前从未见过的那样。要充分理解这三行,我们将需要查看来自HTML和CSS的一些代码段。
代码列表2 下面显示了 resultbox 引用的HTML元素:
â
no Match
<! - 动态内容居住在这里。 - >
代码清单2. resultbox捕获的html元素
您可能会从第2部分中回忆起以元素
<div id= “getResults”>
开头的代码列表,其中包含带有两个按钮的整个小部件和<p>
元素, no匹配消息显示在<< BR>上面清单1。
我们需要简要介绍 css 代码,以充分了解populateResultBox()
正在更改的内容。
查看代码列表3 下面:
代码列表3. CSS类控制Resultbox背景颜色
您可以看到,.default-result
类指定灰色背景。由于此背景是要填充resultBox
的结果的占位符的一部分,因此我们想清除它。
现在,让我们查看populateResultBox()
回调函数中的第一行代码:
resultBox.classList.remove(‘default-result’);
我们知道,resultBox
对象捕获代码清单中显示的<div id=“results”>
2 。
在文档对象模型(dom)中,HTML元素具有classList
属性,它可以跟踪与它们相关的所有CSS类。
链接到classList属性的remove()
方法确实做到了它所说的内容,它将从classlist中删除了该类。这确实是不是意味着该类是从链接的CSS文件中删除的。 的意思是,浏览器中显示的网页将不再在结果的滚动窗口中显示灰色背景。
现在让我们回顾我们的第二行代码:
resultBox.removeChild(placeHolder);
这条代码与 dom树中的节点有关。就像你
可能从早期回想起,placeHolder
是捕获
的DOM节点
<p class=“default-message” id=“message”>no match</p>.
本段是无匹配在我们应用程序的开头屏幕上显示的消息。显然,我们需要从显示屏中删除它。
removeChild()
方法从父节点中删除了子节点。 placeHolder
是resultBox
的子节点。与上面的remove()
方法一样,removeChild()
将段落留在HTML中。它只是从我们的现场显示中删除。
接下来让我们回顾我们的第三行代码:
resultBox.classList.add(‘custom-scrollbar’);
在这里,我们正在做一些完全不同的事情。在这里,我们将CSS类
添加到reasultBox
。 代码列表3 下面显示了CSS类.custom-scrollbar
的代码:
.custom-scrollbar {
--scrollbar-foreground: #a239ca;
--scrollbar-background: rgba(162, 57, 202, 0.25);
/* Foreground and Background Colors */
scrollbar-color: var(--scrollbar-foreground)
var(--scrollbar-background);
}
代码列表4. CSS类控制Result Box的滚动式样式
没有深入研究上述代码,我们只需要知道的是,该类将在resultBox
中的滚动条设置前景和背景样式。对于那些有兴趣深入研究样式的人,上述样式是由CSS Tricks 的作品(Coyier,')所启发的,它使用自定义属性来造型CSS << /em>)。
add()
方法将链接到classList
属性,与我们瞬间看到的remove()
方法相比,将CSS类添加到resultBox
。
populateResultBox()
回调函数中的其余代码已经涵盖了第2部分,第6步,本教程的步骤6 。
depopulateResultBox()
功能
depopulateResultBox()
功能现在,我们可以将注意力转向编码depopulateResultBox()
回调函数。您可能会猜到,此功能的目的是删除填充resultBox
的段落并恢复与之关联的默认消息和样式。
在入门代码中搜索读取的行:
// TO BE DONE: Code depopulateResultBox() callback function.
并将其替换为以下代码:
const depopulateResultBox = () => {
while (resultBox.firstChild) {
resultBox.removeChild(resultBox.firstChild);
}
resultBox.classList.remove(‘custom-scrollbar’);
resultBox.classList.add(‘default-result’);
resultBox.appendChild(placeholder);
};
代码列表5. Depupulateresultbox()函数
当我们在上面编码depopulateResultBox()
辅助函数时,我们已经满足了此功能中看到的所有方法。因此,这是此代码中发生的事情的快速分解:
1.我们从一个段循环开始,该循环进行一个参数
''我们已经知道,结果箱是
''''''。因此,它揭示了属性和方法。
'''''''''''''''这将是Resultbox中的第一段。
2.循环是一个布尔值,在
上评估
''是的,如果result box中有firstChild
段落节点。每个
'
>爱谢谢谁是 /个人资料
执行,它消除了一段。在
的每次迭代中,下一个段落的循环成为第一段。一旦
没有剩下的firstChild
,循环就会终止,因为没有
''''段落。
3.一旦将所有段落删除后,剩下的三个段落
'''''''''''''''''''''' '.custom-scrollbar
类,恢复灰色背景,
'''''最终使用附录()方法来恢复
- >没有匹配消息。
我们现在已经完成了回调函数,并准备继续进行
到最后一步,编码事件听众的 validation juardiate邮政编码
和 reset 强>按钮。
步骤8.编码事件听众
现在,我们迈出了完成我们的应用程序的最终步骤' 对于我们的按钮。
开始,我想回想一下我们在 第2部分的开头创建的两个声明的节点对象,正则表达式:从理论到实践 强>:
const resultButton = document.getElementById(‘validate’);
const resetButton = document.getElementById(‘reset’);
代码清单6.需要事件听众的节点
这两行代码是我们的起点,因为我们需要它们来构建活动听众。
resultButton
是捕获
<button class=“controlButton” id=“validate”>
元素的dom节点。 index.html file。
resetButton
是捕获
<button class=“controlButton” id=“reset”>
元素的DOM节点。
有了这些新信息,我们可以开始。
将事件侦听器添加到验证邮政编码butth
在入门代码中搜索读取的行:
// TO BE DONE: Code resultButton event listener.
并将其替换为以下代码:
resultButton.addEventListener(‘click’, populateResultBox);
使用resultButton
dom节点,我们将addEventListener()
方法链接到了它。如您所见,此方法需要两个参数。
第一个指定要侦听哪种类型的事件(有多种不同的事件)。我们的是单击事件,这意味着JavaScript将收听resultButton
上的任何鼠标单击。
第二个是在检测到点击事件时要执行的回调函数。回调函数可以是第二个参数包含的匿名函数。在我们的情况下,回调函数为populateResultBox()
。
使用此事件侦听器,现在我们应该能够在单击 “验证邮政编码”按钮时使用有效的邮政编码匹配的resultBox
填充resultBox
。让我们测试这个。
如果您尚未这样做,请在您喜欢的浏览器中打开 index.html 文件。如果您已经打开文件,请确保刷新浏览器。
单击验证邮政编码按钮。
您的屏幕应该看起来很像 图1 :
图。 1.带有滚动条的Result Box,并用有效的邮政编码填充
将事件侦听器添加到重置button
现在让S代码为“重置”按钮的事件侦听器。
在入门代码中搜索读取的行:
// TO BE DONE: CODE resetButton event listener.
并将其替换为以下代码:
resetButton.addEventListener(‘click’, depopulateResultBox);
此事件侦听器还会在我们的重置按钮上听单击事件,并调用depopulateResultBox()
回调函数将我们的页面重置为其开始状态。
要测试一下,请刷新您的浏览器。现在,单击验证邮政编码按钮。一旦看到结果框已使用邮政编码匹配填充,请单击 reset 按钮。
如果一切都按计划进行,则您的屏幕应以消息 显示在邮政编码匹配的滚动列表的位置。
结论
恭喜! 您已经完成了演示邮政编码验证单页应用程序(SPA)。
如果您的代码不起作用,并且您不确定为什么 ,您可以下载我的完整代码并将其比较以找到任何错误。<<<<<<<<<<<<<<< /em>
您也可以在codepen.io上查看实时应用程序。
Next Steps
现在您拥有一个功能性演示Web应用程序,该应用程序可以从测试字符串返回有效的邮政编码, 您可以从这里去哪里?
玩您拥有的成品代码。这是一些建议:
-
实验,从其操作的数据中进一步删除辅助功能,如我的
createParagraphs()
函数示例。 -
想想如何使其成为一个真正的交互式应用程序,用户只需输入测试字符串,然后单击 validate jip ardifate邮政编码按钮按钮获取结果。
最后,随意到分叉[我的存储库(https://github.com/RHieger/regex-zip-code-tutorial)并创建您自己的版本。
快乐编码!
- 参考文献B
coyier,克里斯。 CSS中造型滚动条的当前状态(2022
–ââââââ–'):CSS-TRICKS。 CSS技巧,2022年2月21日,
[https://css-tricks.com/the-current-state-of-styling-scrollbars-in-css/#aa-using-custom-properties-for-styling-scrollbars-in-css。