WEBVTT

1
00:00:01.340 --> 00:00:04.160
<v Lecturer>In this video, we're finally gonna be back</v>

2
00:00:04.160 --> 00:00:06.430
to DOM manipulation.

3
00:00:06.430 --> 00:00:07.270
And we're gonna learn

4
00:00:07.270 --> 00:00:09.960
a couple of DOM manipulation techniques.

5
00:00:09.960 --> 00:00:12.060
And we will use them together

6
00:00:12.060 --> 00:00:15.730
with the forEach method that we just learned about.

7
00:00:15.730 --> 00:00:18.320
So this is really exciting stuff.

8
00:00:18.320 --> 00:00:20.003
So let's get started.

9
00:00:21.840 --> 00:00:26.840
And to start, let's actually open up the HTML and CSS files

10
00:00:27.510 --> 00:00:30.070
and we will then keep them open here

11
00:00:30.070 --> 00:00:31.493
throughout this project.

12
00:00:32.540 --> 00:00:35.900
And I like to have the script always the last.

13
00:00:35.900 --> 00:00:40.380
Now, in the HTML, we have this navigation bar.

14
00:00:40.380 --> 00:00:44.570
So there's nav element, which has all of this top part.

15
00:00:44.570 --> 00:00:47.770
And then after that we have the main element.

16
00:00:47.770 --> 00:00:51.070
And so that's basically the entire application

17
00:00:51.070 --> 00:00:53.683
and that part is right now invisible.

18
00:00:54.520 --> 00:00:57.593
And so that's because here in the CSS,

19
00:00:58.480 --> 00:01:02.130
so in line 87 we have the app selector

20
00:01:02.130 --> 00:01:04.580
and the opacity is set to zero.

21
00:01:04.580 --> 00:01:06.690
And so we need to comment that.

22
00:01:06.690 --> 00:01:09.770
And for that we can as always use comment slash,

23
00:01:09.770 --> 00:01:11.720
give it a save,

24
00:01:11.720 --> 00:01:16.420
and then we can finally see the application here.

25
00:01:16.420 --> 00:01:17.810
Alright.

26
00:01:17.810 --> 00:01:21.110
So logging in and out of this application

27
00:01:21.110 --> 00:01:25.340
is essentially just changing this opacity here.

28
00:01:25.340 --> 00:01:29.960
And so now the opacity is basically back to 100

29
00:01:29.960 --> 00:01:32.520
because now we commented it out

30
00:01:32.520 --> 00:01:34.233
and so 100 is the default.

31
00:01:35.370 --> 00:01:38.730
But anyway, let's go back to our script here.

32
00:01:38.730 --> 00:01:40.950
And so what we want to do now

33
00:01:40.950 --> 00:01:45.000
is to basically display these movements right here

34
00:01:45.000 --> 00:01:48.110
in the application here in this list.

35
00:01:48.110 --> 00:01:49.810
So in this container.

36
00:01:49.810 --> 00:01:54.810
So for each movement, we want one element like this, okay.

37
00:01:55.450 --> 00:01:57.180
And we will be able to do that

38
00:01:57.180 --> 00:01:59.400
because of the forEach method

39
00:01:59.400 --> 00:02:02.580
which will allow us to loop through this array.

40
00:02:02.580 --> 00:02:04.080
And then in each iteration

41
00:02:05.150 --> 00:02:07.400
basically create an element like this

42
00:02:07.400 --> 00:02:09.730
and display it on the page.

43
00:02:09.730 --> 00:02:13.490
So this time we're finally gonna move away from the console

44
00:02:13.490 --> 00:02:16.630
and actually do some DOM manipulation here.

45
00:02:16.630 --> 00:02:17.800
Now, right.

46
00:02:17.800 --> 00:02:21.563
So let's move down here after these elements,

47
00:02:22.520 --> 00:02:25.650
but still inside of the app part of this file

48
00:02:26.490 --> 00:02:28.450
and then let's write our code.

49
00:02:28.450 --> 00:02:30.920
Now we could simply start writing our code

50
00:02:30.920 --> 00:02:33.330
out here in the global context.

51
00:02:33.330 --> 00:02:35.740
However, that is not a good practice.

52
00:02:35.740 --> 00:02:38.170
So whenever we do something like this,

53
00:02:38.170 --> 00:02:40.563
it's always best to create a function.

54
00:02:41.530 --> 00:02:46.470
So let's call this one print or a display.

55
00:02:46.470 --> 00:02:48.440
I prefer display.

56
00:02:48.440 --> 00:02:50.240
So displayMovements.

57
00:02:51.420 --> 00:02:54.100
And then we make this function receive the data

58
00:02:54.100 --> 00:02:57.380
with which it should actually work,

59
00:02:57.380 --> 00:03:00.360
so in this case, that's the movements.

60
00:03:00.360 --> 00:03:02.850
So we call this parameter movements

61
00:03:02.850 --> 00:03:07.850
because this function should receive one array of movements

62
00:03:07.920 --> 00:03:10.400
and then work with that data.

63
00:03:10.400 --> 00:03:13.660
So in this case, that's the movements that it should display

64
00:03:13.660 --> 00:03:15.360
in the user interface.

65
00:03:15.360 --> 00:03:16.210
Now, right?

66
00:03:16.210 --> 00:03:18.910
And so it's a good practice to pass the data

67
00:03:18.910 --> 00:03:20.240
into a function

68
00:03:20.240 --> 00:03:23.510
instead of, for example, having this function work

69
00:03:23.510 --> 00:03:25.150
with a global variable.

70
00:03:25.150 --> 00:03:26.990
That would work as well

71
00:03:26.990 --> 00:03:30.070
but it's a lot better to pass that data directly

72
00:03:30.070 --> 00:03:31.690
into the function.

73
00:03:31.690 --> 00:03:32.523
Okay.

74
00:03:32.523 --> 00:03:35.160
So get used to that kind of approach.

75
00:03:35.160 --> 00:03:36.170
All right.

76
00:03:36.170 --> 00:03:39.510
So again, instead of working with global variables,

77
00:03:39.510 --> 00:03:42.370
start passing the data that function needs

78
00:03:42.370 --> 00:03:44.363
actually into that function.

79
00:03:45.230 --> 00:03:46.673
So let me, as always,

80
00:03:48.660 --> 00:03:50.400
call this function first

81
00:03:50.400 --> 00:03:54.020
to see what we will get as an input.

82
00:03:54.020 --> 00:03:56.080
And so the movements that I will use here

83
00:03:57.800 --> 00:04:00.070
will come from this account1.

84
00:04:00.070 --> 00:04:03.040
So essentially that's gonna be this array.

85
00:04:03.040 --> 00:04:05.663
So account1.movements.

86
00:04:07.670 --> 00:04:12.260
So account1.movements.

87
00:04:12.260 --> 00:04:13.100
Now, Okay.

88
00:04:13.100 --> 00:04:15.430
And so inside of this function,

89
00:04:15.430 --> 00:04:19.050
these movements are simply called movements.

90
00:04:19.050 --> 00:04:22.510
And so now let's loop over these movements

91
00:04:22.510 --> 00:04:24.560
using what we learned before.

92
00:04:24.560 --> 00:04:29.560
So forEach and then our callback function here.

93
00:04:30.610 --> 00:04:32.570
Now inside of this function,

94
00:04:32.570 --> 00:04:34.820
we need the current movement

95
00:04:34.820 --> 00:04:37.420
and we also need the index.

96
00:04:37.420 --> 00:04:41.140
And that's because here actually I have them here

97
00:04:41.140 --> 00:04:43.060
number one, number two.

98
00:04:43.060 --> 00:04:47.260
And so basically we have the movements numbered like this.

99
00:04:47.260 --> 00:04:48.110
Okay.

100
00:04:48.110 --> 00:04:50.520
So starting with the first movement down

101
00:04:50.520 --> 00:04:52.853
and then adding the new ones on top.

102
00:04:54.860 --> 00:04:56.471
Okay.

103
00:04:56.471 --> 00:04:57.304
All right.

104
00:04:57.304 --> 00:04:58.880
So that's the easiest part.

105
00:04:58.880 --> 00:05:02.780
Now we have to essentially create an HTML

106
00:05:02.780 --> 00:05:05.130
that looks like this.

107
00:05:05.130 --> 00:05:07.860
So let's go to our HTML file

108
00:05:07.860 --> 00:05:10.770
and to actually take a look

109
00:05:10.770 --> 00:05:12.973
at what does HTML looks like.

110
00:05:13.900 --> 00:05:18.820
So we are inside our app element here basically.

111
00:05:18.820 --> 00:05:21.460
Then we have this movements element

112
00:05:21.460 --> 00:05:24.320
which is all of this container here.

113
00:05:24.320 --> 00:05:25.930
And maybe it would be easier

114
00:05:25.930 --> 00:05:28.373
to actually see this in the console.

115
00:05:30.540 --> 00:05:35.540
So if we did this maybe we can get rid of this part.

116
00:05:36.890 --> 00:05:37.723
Not really.

117
00:05:39.120 --> 00:05:40.460
But anyway, now we can see

118
00:05:40.460 --> 00:05:42.303
that all of this is the movements.

119
00:05:43.152 --> 00:05:46.670
And then in each movement we have a movements_row.

120
00:05:46.670 --> 00:05:50.000
So each of this is a movements_row.

121
00:05:50.000 --> 00:05:51.180
Okay.

122
00:05:51.180 --> 00:05:53.350
And so lets now copy the entire code

123
00:05:53.350 --> 00:05:55.220
of one movements_row

124
00:05:55.220 --> 00:05:57.640
because this is what we want to create

125
00:05:57.640 --> 00:06:01.203
in each iteration of the loop with the current data.

126
00:06:02.950 --> 00:06:07.950
So, essentially let's take all of this.

127
00:06:07.990 --> 00:06:09.140
So I'm gonna copy it

128
00:06:10.560 --> 00:06:14.403
and let me now paste it here into a template string.

129
00:06:15.290 --> 00:06:17.096
So I'll create a variable,

130
00:06:17.096 --> 00:06:19.540
which I'm gonna call HTML

131
00:06:19.540 --> 00:06:22.140
and then I'm creating a template literal.

132
00:06:22.140 --> 00:06:24.800
And template literals are amazing

133
00:06:24.800 --> 00:06:26.970
for creating HTML templates,

134
00:06:26.970 --> 00:06:29.830
like the one one we will create now,

135
00:06:29.830 --> 00:06:31.270
because now it's really easy

136
00:06:31.270 --> 00:06:34.583
to create a multi-line string like this.

137
00:06:36.940 --> 00:06:37.773
Okay.

138
00:06:37.773 --> 00:06:40.450
Let's just fix indentation here a little bit

139
00:06:40.450 --> 00:06:42.400
to make this then easier to understand.

140
00:06:43.689 --> 00:06:44.522
Okay.

141
00:06:44.522 --> 00:06:46.210
And now all we have to do

142
00:06:46.210 --> 00:06:50.106
is to basically replace the data that's not relevant,

143
00:06:50.106 --> 00:06:52.450
so this hard coded data,

144
00:06:52.450 --> 00:06:55.355
with our actual movements data.

145
00:06:55.355 --> 00:06:57.220
Okay.

146
00:06:57.220 --> 00:06:58.890
Now this part here of the date,

147
00:06:58.890 --> 00:07:00.500
we will not do now.

148
00:07:00.500 --> 00:07:03.058
We will take care of this in the next section,

149
00:07:03.058 --> 00:07:05.760
So let's get rid of it.

150
00:07:05.760 --> 00:07:08.187
And then here we have the movements_value.

151
00:07:09.220 --> 00:07:10.470
So this is formatted

152
00:07:10.470 --> 00:07:13.300
but again, we will just use the plain value

153
00:07:13.300 --> 00:07:15.573
that's coming out of the array for now.

154
00:07:16.460 --> 00:07:19.875
And so now we can simply insert that here.

155
00:07:19.875 --> 00:07:23.640
And so that's mov, right?

156
00:07:23.640 --> 00:07:26.380
So mov is the current element in the array

157
00:07:26.380 --> 00:07:28.120
that we are looping over.

158
00:07:28.120 --> 00:07:29.400
And so in each iteration

159
00:07:29.400 --> 00:07:33.253
that will then be one of the movements in the array.

160
00:07:34.250 --> 00:07:37.390
Then here we have 2 deposit.

161
00:07:37.390 --> 00:07:38.660
And so we will have to check

162
00:07:38.660 --> 00:07:43.580
whether a certain movement is a deposit or a withdrawal.

163
00:07:43.580 --> 00:07:45.650
So let's delete that.

164
00:07:45.650 --> 00:07:48.455
And for now we can add the number here.

165
00:07:48.455 --> 00:07:50.686
So you see one, two,

166
00:07:50.686 --> 00:07:54.350
and so for that, we now use the i.

167
00:07:54.350 --> 00:07:57.850
And so that's why we also need it to do current index

168
00:07:57.850 --> 00:07:59.943
besides just the current value.

169
00:08:01.560 --> 00:08:02.560
Okay.

170
00:08:02.560 --> 00:08:04.700
And now we need a way to knowing

171
00:08:04.700 --> 00:08:07.750
if it's a deposit or a withdrawal.

172
00:08:07.750 --> 00:08:11.220
And so let's use a ternary operator

173
00:08:11.220 --> 00:08:12.850
and let's do that out here

174
00:08:12.850 --> 00:08:14.440
as a separate variable,

175
00:08:14.440 --> 00:08:16.380
because we will need that twice.

176
00:08:16.380 --> 00:08:17.213
We will need it

177
00:08:17.213 --> 00:08:20.306
one, to write it here on the user interface,

178
00:08:20.306 --> 00:08:23.953
but here also, this class name depends on that.

179
00:08:24.840 --> 00:08:28.550
So you see that we have type--deposit.

180
00:08:28.550 --> 00:08:31.880
So that's in this green color

181
00:08:31.880 --> 00:08:35.270
and we have type--withdrawal

182
00:08:35.270 --> 00:08:37.023
and so that's in this red color.

183
00:08:38.550 --> 00:08:41.770
So we will need this information twice.

184
00:08:41.770 --> 00:08:43.970
And so let's just calculate it outside here.

185
00:08:45.830 --> 00:08:47.563
So I'm gonna call it type.

186
00:08:49.060 --> 00:08:51.820
And so this is the same logic as before.

187
00:08:51.820 --> 00:08:55.200
So if the current movement is greater than zero

188
00:08:56.652 --> 00:09:00.230
then the type should be deposit

189
00:09:00.230 --> 00:09:03.213
or else it should then be withdrawal.

190
00:09:04.357 --> 00:09:05.573
Okay.

191
00:09:06.420 --> 00:09:09.593
And now let's write that here.

192
00:09:10.800 --> 00:09:14.540
So to type here, and again also here in the class name.

193
00:09:14.540 --> 00:09:19.540
So we can also basically construct this a class name here

194
00:09:20.290 --> 00:09:21.803
which is very useful too.

195
00:09:22.840 --> 00:09:24.710
And I hope here, you can see

196
00:09:24.710 --> 00:09:28.423
that the template literal is really a lifesaver here.

197
00:09:30.400 --> 00:09:31.910
Okay.

198
00:09:31.910 --> 00:09:36.020
So we created our HTML template here.

199
00:09:36.020 --> 00:09:37.510
Now, all we need to do

200
00:09:37.510 --> 00:09:41.520
is to find a way to actually adding this HTML

201
00:09:41.520 --> 00:09:43.860
onto the webpage here.

202
00:09:43.860 --> 00:09:48.860
So we need to attach this HTML somehow into this container.

203
00:09:50.290 --> 00:09:52.550
So into this movements element.

204
00:09:52.550 --> 00:09:53.940
Okay.

205
00:09:53.940 --> 00:09:55.210
And to do that,

206
00:09:55.210 --> 00:09:58.567
we will use a method called insertAdjacentHTML.

207
00:10:00.470 --> 00:10:04.263
So that's gotta go right here.

208
00:10:05.710 --> 00:10:09.210
So let me first write the name of the method.

209
00:10:09.210 --> 00:10:10.260
And then I'm gonna tell you

210
00:10:10.260 --> 00:10:13.533
where we actually have to attach this method to.

211
00:10:15.140 --> 00:10:16.840
So it's called insertAdjacentHTML.

212
00:10:20.779 --> 00:10:22.730
And we are gonna call this method

213
00:10:22.730 --> 00:10:25.390
on this movements element here.

214
00:10:25.390 --> 00:10:26.700
So this container

215
00:10:26.700 --> 00:10:30.780
onto which we want to add a new movements_row element.

216
00:10:30.780 --> 00:10:32.310
So this element here

217
00:10:32.310 --> 00:10:37.310
on which we want to add a new movement_row, right?

218
00:10:37.310 --> 00:10:40.930
So we are looking for an element with a class of movements.

219
00:10:40.930 --> 00:10:43.400
And as I told you in the last lecture,

220
00:10:43.400 --> 00:10:46.450
I already selected all of these elements.

221
00:10:46.450 --> 00:10:48.770
And so in this case, it's this one,

222
00:10:48.770 --> 00:10:51.347
and so the name is containerMovements.

223
00:10:52.690 --> 00:10:54.020
Okay.

224
00:10:54.020 --> 00:10:57.870
So you see that I used kind of a uniform names here.

225
00:10:57.870 --> 00:10:59.590
So I have containerApp

226
00:10:59.590 --> 00:11:02.670
for this entire application container

227
00:11:02.670 --> 00:11:04.400
and containerMovements.

228
00:11:04.400 --> 00:11:07.010
Then all the other ones are called label.

229
00:11:07.010 --> 00:11:10.600
So labelWelcome, date and so on and so forth.

230
00:11:10.600 --> 00:11:13.650
Then the others are called button

231
00:11:13.650 --> 00:11:17.100
and then all the input fields are all called input

232
00:11:17.100 --> 00:11:19.823
and to then whatever the name of them,

233
00:11:20.900 --> 00:11:24.010
so to keep it nice and easy to understand.

234
00:11:24.010 --> 00:11:27.537
But anyway, this one is called containerMovements.

235
00:11:28.470 --> 00:11:33.017
And so onto there, again, we call insertAdjacentHTML.

236
00:11:33.960 --> 00:11:37.060
And this method accepts two strings.

237
00:11:37.060 --> 00:11:39.000
The first string is the position

238
00:11:39.000 --> 00:11:41.723
in which we want to attach the HTML.

239
00:11:42.650 --> 00:11:45.490
And this one I'm gonna set to afterbegin,

240
00:11:47.100 --> 00:11:48.990
but there are more options.

241
00:11:48.990 --> 00:11:52.290
And I think the best way of showing it to you

242
00:11:52.290 --> 00:11:55.750
is actually in the documentation.

243
00:11:55.750 --> 00:11:56.713
So MDN.

244
00:11:57.960 --> 00:12:00.530
And so whenever I need to figure out something,

245
00:12:00.530 --> 00:12:01.623
this is how I do it.

246
00:12:03.700 --> 00:12:04.810
So I know that down here,

247
00:12:04.810 --> 00:12:06.863
there is a visualization,

248
00:12:07.810 --> 00:12:09.410
and yeah.

249
00:12:09.410 --> 00:12:11.990
So these are the four options here

250
00:12:11.990 --> 00:12:15.038
and the one we chose is afterbegin.

251
00:12:15.038 --> 00:12:16.463
So that's this one.

252
00:12:17.920 --> 00:12:20.100
So imagine that this p element here

253
00:12:20.100 --> 00:12:22.400
is our containerMovements.

254
00:12:22.400 --> 00:12:24.910
And so basically I want to add new elements

255
00:12:24.910 --> 00:12:28.290
right after the beginning of this element.

256
00:12:28.290 --> 00:12:30.310
And so basically I'm saying here

257
00:12:30.310 --> 00:12:33.150
that I want to insert the new child element

258
00:12:33.150 --> 00:12:36.250
right after the beginning of the parent element.

259
00:12:36.250 --> 00:12:39.038
And so again, that's containerMovements.

260
00:12:39.038 --> 00:12:40.380
Then we have beforeend,

261
00:12:40.380 --> 00:12:44.490
which is at the end of the element as the name says

262
00:12:44.490 --> 00:12:48.380
and then we can even put it outside of the parent element.

263
00:12:48.380 --> 00:12:49.780
And then we could even put it

264
00:12:49.780 --> 00:12:52.048
outside of the containerMovements.

265
00:12:52.048 --> 00:12:55.630
And sometimes this is useful as well.

266
00:12:55.630 --> 00:13:00.040
But usually, I always use afterbegin or beforeend.

267
00:13:00.040 --> 00:13:01.690
And once we see the results,

268
00:13:01.690 --> 00:13:03.110
I will explain a bit better

269
00:13:03.110 --> 00:13:06.407
why it's afterbegin and not beforeend.

270
00:13:07.500 --> 00:13:09.510
But anyway, let's go back here

271
00:13:09.510 --> 00:13:13.140
because now we need to specify the second argument

272
00:13:13.140 --> 00:13:16.453
and that is the string containing the HTML

273
00:13:16.453 --> 00:13:17.993
that we want to insert.

274
00:13:19.350 --> 00:13:20.770
And that's it.

275
00:13:20.770 --> 00:13:23.633
So if we now run this, it should already work.

276
00:13:25.260 --> 00:13:27.263
And yes it does.

277
00:13:28.770 --> 00:13:30.720
So that's amazing.

278
00:13:30.720 --> 00:13:32.660
And let's check it out

279
00:13:32.660 --> 00:13:35.093
and let's compare it with our values.

280
00:13:36.150 --> 00:13:40.780
And so indeed, the newest one is the last one here.

281
00:13:40.780 --> 00:13:43.200
And so that's element number eight

282
00:13:43.200 --> 00:13:46.550
and it is indeed 1300, right?

283
00:13:46.550 --> 00:13:50.450
And it is indeed green because it is a deposit.

284
00:13:50.450 --> 00:13:52.570
So a positive number.

285
00:13:52.570 --> 00:13:54.000
The same with the 70.

286
00:13:54.000 --> 00:13:56.300
And then we have minus 130,

287
00:13:56.300 --> 00:13:58.859
and so indeed that's a withdrawal.

288
00:13:58.859 --> 00:14:00.573
Beautiful.

289
00:14:00.573 --> 00:14:02.690
Now, if we scroll down here,

290
00:14:02.690 --> 00:14:06.600
we will see that we still have these two old ones.

291
00:14:06.600 --> 00:14:09.620
So basically the two that were already there.

292
00:14:09.620 --> 00:14:11.550
And that's because all we are doing

293
00:14:11.550 --> 00:14:14.663
is to add new elements to this container,

294
00:14:17.180 --> 00:14:18.485
right?

295
00:14:18.485 --> 00:14:21.490
We're only inserting new HTML here

296
00:14:21.490 --> 00:14:23.800
inside of the containerMovements

297
00:14:23.800 --> 00:14:26.160
but we are not overriding anything.

298
00:14:26.160 --> 00:14:30.479
And so actually that has to be the first thing that we do.

299
00:14:30.479 --> 00:14:33.420
So the first thing is to essentially

300
00:14:33.420 --> 00:14:36.000
empty the entire container

301
00:14:36.000 --> 00:14:38.453
and only then we start adding new elements.

302
00:14:40.930 --> 00:14:43.470
So that's something common to do

303
00:14:43.470 --> 00:14:47.130
and it is also not difficult at all.

304
00:14:47.130 --> 00:14:49.140
So container movements

305
00:14:49.140 --> 00:14:51.963
and now we can use the inner HTML property,

306
00:14:52.959 --> 00:14:53.792
innerHTML,

307
00:14:55.110 --> 00:14:57.740
and set it to the empty string

308
00:14:58.770 --> 00:14:59.603
and that's it.

309
00:15:00.730 --> 00:15:03.203
So this fixes our problem.

310
00:15:04.800 --> 00:15:06.060
Alright.

311
00:15:06.060 --> 00:15:07.540
Now in our HTML here

312
00:15:07.540 --> 00:15:11.380
is a little bit similar to text content.

313
00:15:11.380 --> 00:15:14.060
So remember that now the difference

314
00:15:14.060 --> 00:15:18.330
is that text content simply returns the text itself

315
00:15:18.330 --> 00:15:22.710
while HTML returns everything, including the HTML.

316
00:15:22.710 --> 00:15:26.210
So all the HTML tags will be included.

317
00:15:26.210 --> 00:15:27.680
Okay.

318
00:15:27.680 --> 00:15:31.700
But here we are then using innerHTML as a setter.

319
00:15:31.700 --> 00:15:36.000
So just like we also used text content equal empty string

320
00:15:36.000 --> 00:15:38.630
or equal something else, remember?

321
00:15:38.630 --> 00:15:41.890
So we used to do in our pic game, for example,

322
00:15:41.890 --> 00:15:42.836
like whatever

323
00:15:42.836 --> 00:15:43.669
(indistinct)

324
00:15:43.669 --> 00:15:45.260
<v Lecturer>Text content,</v>

325
00:15:45.260 --> 00:15:47.620
and then set it to zero.

326
00:15:47.620 --> 00:15:49.080
Remember that?

327
00:15:49.080 --> 00:15:53.350
But as I said, we can also use this to read data.

328
00:15:53.350 --> 00:15:55.640
So that's simply log to the console

329
00:15:55.640 --> 00:15:58.680
just to understand this property

330
00:15:58.680 --> 00:15:59.980
which is pretty important.

331
00:16:01.610 --> 00:16:02.610
So after all this,

332
00:16:02.610 --> 00:16:05.273
let's do containerMovements.innerHTML.

333
00:16:06.760 --> 00:16:09.390
So we're simply reading the innerHTML

334
00:16:09.390 --> 00:16:11.140
and then logging it to the console.

335
00:16:14.210 --> 00:16:19.210
So console, and indeed, here you'll see all of this HTML.

336
00:16:20.690 --> 00:16:21.523
All right.

337
00:16:21.523 --> 00:16:24.983
So essentially that's the HTML that we just created.

338
00:16:26.300 --> 00:16:27.930
Okay.

339
00:16:27.930 --> 00:16:29.870
But let's get rid of this.

340
00:16:29.870 --> 00:16:32.710
I just wanted to show you both sides

341
00:16:32.710 --> 00:16:34.893
or both applications of innerHTML.

342
00:16:38.330 --> 00:16:39.163
All right.

343
00:16:39.163 --> 00:16:41.410
And finally, I wanted to show you

344
00:16:41.410 --> 00:16:45.130
why I used afterbegin and not beforeend.

345
00:16:45.130 --> 00:16:47.887
Well, let me show you what happened with beforeend.

346
00:16:49.430 --> 00:16:51.960
I think this is how it works.

347
00:16:51.960 --> 00:16:53.360
So beforeend.

348
00:16:53.360 --> 00:16:54.750
Yeah.

349
00:16:54.750 --> 00:16:59.750
So with that, the order of the movements would be inverted.

350
00:17:00.060 --> 00:17:00.950
Okay.

351
00:17:00.950 --> 00:17:04.270
And that's because each new element would simply be added

352
00:17:04.270 --> 00:17:06.030
after the previous one.

353
00:17:06.030 --> 00:17:09.410
So at the end of the container, right?

354
00:17:09.410 --> 00:17:12.190
And so that's after all the child elements

355
00:17:12.190 --> 00:17:14.470
that are already in there.

356
00:17:14.470 --> 00:17:17.770
And that's why I wanted it to be the other way around

357
00:17:17.770 --> 00:17:21.880
because like this, it will always be basically appended

358
00:17:21.880 --> 00:17:23.710
to all the other children.

359
00:17:23.710 --> 00:17:25.410
So any new child element

360
00:17:25.410 --> 00:17:28.650
will appear before all the other child elements

361
00:17:28.650 --> 00:17:30.880
that were already there.

362
00:17:30.880 --> 00:17:35.880
And so now we are back to the order that we wanted here.

363
00:17:36.400 --> 00:17:37.450
ALright.

364
00:17:37.450 --> 00:17:39.150
That's amazing.

365
00:17:39.150 --> 00:17:41.660
So we completed the first part

366
00:17:41.660 --> 00:17:44.070
of our user interface here already

367
00:17:44.070 --> 00:17:47.470
and all with the power of the forEach method.

368
00:17:47.470 --> 00:17:50.630
And then also we introduced some new concepts

369
00:17:50.630 --> 00:17:55.140
in particular here the insertAdjacentHTML method,

370
00:17:55.140 --> 00:17:58.420
and then the innerHTML property.

371
00:17:58.420 --> 00:18:00.420
Now, there are many other ways

372
00:18:00.420 --> 00:18:04.980
of creating elements in JavaScript besides this one here.

373
00:18:04.980 --> 00:18:06.730
And we're gonna study all of them

374
00:18:06.730 --> 00:18:09.440
in great detail in a future section.

375
00:18:09.440 --> 00:18:12.790
But this here is actually the one that I liked the most.

376
00:18:12.790 --> 00:18:16.950
It's the easy, quick and dirty solution, so to say.

377
00:18:16.950 --> 00:18:21.950
So all we have to do is to create a string of HTML.

378
00:18:22.090 --> 00:18:27.090
And then we can insert that simply with this method.

379
00:18:27.470 --> 00:18:30.093
So very simple, very straightforward.

380
00:18:30.940 --> 00:18:32.940
So this is some great DOM manipulation

381
00:18:32.940 --> 00:18:34.710
that we did right here.

382
00:18:34.710 --> 00:18:36.780
And I'm really happy about the result

383
00:18:36.780 --> 00:18:40.040
that we got here in our application.

384
00:18:40.040 --> 00:18:40.873
Great.

385
00:18:40.873 --> 00:18:42.073
So let's now move on.

