正则表达式仪式:完成申请
#javascript #regex #dom

JavaScript in Plain English logo

本文首次发表在JavaScript in Plain English

第3部分:从基础架构到完成的应用程序

Woman with Computer Code Superimposed

ThisisEngineering RAEngUnsplash上的照片

目录


欢迎回来!

我们的时刻到了。现在,我们准备完成我们的应用程序,以 正则表达式开始:从理论到实践

完成应用程序

我们在本教程的第2部分中删除了第6步,其中我们构建了应用程序的基础架构,提供了所有必要的数据结构和辅助功能。

剩下的两个步骤可以完成该应用程序:

1.我们需要对两个

使用的回调函数进行编码。

2。


步骤7.编码回调功能

让我们暂时考虑这些回调功能需要完成的工作。我们知道它们是将它们作为参数附加到两个事件侦听器的内容,一个在上聆听 验证邮政编码按钮,另一个在<强>重置按钮。

我们将在第2部分的结尾处准确地拿起您在代码中删除的位置。

对于验证邮政编码按钮,我们需要一个回调函数,该函数将与 no Match 的默认消息交换内容,并用填充其父有效邮政编码匹配的滚动窗口


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元素:

class =“结果数据二维默认值”>
â

no Match


<! - 动态内容居住在这里。 - >

代码清单2. resultbox捕获的html元素

您可能会从第2部分中回忆起以元素
<div id= “getResults”>开头的代码列表,其中包含带有两个按钮的整个小部件和<p>元素, no匹配消息显示在<< BR>上面清单1。

我们需要简要介绍 css 代码,以充分了解populateResultBox()正在更改的内容。

查看代码列表3 下面:

Code Listing 3. CSS Class Controlling resultBox Background Color

代码列表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()方法从父节点中删除了子节点placeHolderresultBox的子节点。与上面的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()回调函数。您可能会猜到,此功能的目的是删除填充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

Fig. 1. resultBox with Scrollbar and Populated with Valid Zip Codes

图。 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应用程序,该应用程序可以从测试字符串返回有效的邮政编码, 您可以从这里去哪里?

玩您拥有的成品代码。这是一些建议:

  1. 实验,从其操作的数据中进一步删除辅助功能,如我的createParagraphs()函数示例。

  2. 想想如何使其成为一个真正的交互式应用程序,用户只需输入测试字符串,然后单击 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