Difference between revisions of "DOM Creating content"
Jump to navigation
Jump to search
Tag: Manual revert |
|||
(56 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== | <pre id='shellbody' data-qtp='DOM'></pre> | ||
==Create Content== | |||
<div class='qu'> | <div class='qu'> | ||
You can create a div element an set the content. | You can create a div element an set the content. | ||
We use the document method '''createElement''' and the DOM node method ''' | We use the document method '''createElement''' and the DOM node method '''append''' | ||
<div class='imper'>Change the code so that it says 'Hello world'</div> | |||
<pre class='usr'> | <pre class='usr'> | ||
let e = document.createElement('div'); | let e = document.createElement('div'); | ||
e.innerHTML = 'Hello'; | e.innerHTML = 'Hello'; | ||
document.body. | document.body.append(e); | ||
</pre> | </pre> | ||
<pre class='ans'> | <pre class='ans'> | ||
let e = document.createElement('div'); | let e = document.createElement('div'); | ||
e.innerHTML = 'Hello world'; | e.innerHTML = 'Hello world'; | ||
document.body.appendChild(e); | document.body.append(e); | ||
</pre> | |||
</div> | |||
==Create img== | |||
<div class='qu'> | |||
You can create a '''img''' element and set the '''src'''. | |||
In this example you must set the '''src''' and the '''style''' of the new element '''a'''. | |||
a.style = 'width:100px;border:solid;'; | |||
These are CSS properties. | |||
<pre class='usr'> | |||
let a = document.createElement('img'); | |||
a.src = '/flags/fr.png'; | |||
document.body.append(a); | |||
</pre> | |||
<pre class='ans'> | |||
let a = document.createElement('img'); | |||
a.src = '/flags/fr.png'; | |||
a.style = 'width:100px;border:solid;'; | |||
document.body.append(a); | |||
</pre> | |||
</div> | |||
==Create multiple elements== | |||
<div class='qu'> | |||
*You can add several elements to the document.body. | |||
*You can add elements to other elements. | |||
*Change this code to match the model answer | |||
*Can you see why the flag does not show? | |||
<pre class='usr'> | |||
let a = document.createElement('div'); | |||
a.innerHTML = 'Germany, '; | |||
let b = document.createElement('i'); | |||
b.innerHTML = 'Berlin'; | |||
a.appendChild(b); | |||
document.body.append(a); | |||
let c = document.createElement('img'); | |||
c.src = '/flags/de.png'; | |||
c.style = 'width:100px'; | |||
</pre> | |||
<pre class='ans'> | |||
let a = document.createElement('div'); | |||
a.innerHTML = 'Germany, '; | |||
let b = document.createElement('i'); | |||
b.innerHTML = 'Berlin'; | |||
a.append(b); | |||
document.body.appendChild(a); | |||
let c = document.createElement('img'); | |||
c.src = '/flags/de.png'; | |||
c.style = 'width:100px'; | |||
document.body.append(c); | |||
</pre> | |||
</div> | |||
==Setting complex innerHTML== | |||
<div class='qu'> | |||
You can put more complex HTML into an element. | |||
The backticks ` ` can span many lines. | |||
<div class='imper'>Make the flags bigger - you can set the height to 2ex</div> | |||
<pre class='usr'> | |||
let a = document.createElement('div'); | |||
a.innerHTML = ` | |||
<img src='/flags/gr.png' style='height:1ex'> | |||
Greece <i>Athens</i>`; | |||
document.body.appendChild(a); | |||
let b = document.createElement('div'); | |||
b.innerHTML = ` | |||
<img src='/flags/it.png' style='height:1ex'> | |||
Italy <i>Rome</i>`; | |||
document.body.appendChild(b); | |||
</pre> | |||
<pre class='ans'> | |||
let a = document.createElement('div'); | |||
a.innerHTML = ` | |||
<img src='/flags/gr.png' style='height:2ex'> | |||
Greece <i>Athens</i>`; | |||
document.body.appendChild(a); | |||
let b = document.createElement('div'); | |||
b.innerHTML = ` | |||
<img src='/flags/it.png' style='height:2ex'> | |||
Italy <i>Rome</i>`; | |||
document.body.appendChild(b); | |||
</pre> | |||
</div> | |||
==Using functions== | |||
<div class='qu'> | |||
* You should avoid copying chunks of code. | |||
* A well chosen function can help avoid that. | |||
* Notice how ''string interpolation'' allows you to include variables in the string. | |||
<pre class='usr'> | |||
function addCountryDiv(name, capital, flag){ | |||
let a = document.createElement('div'); | |||
a.innerHTML = ` | |||
<img src='/flags/${flag}.png' | |||
style='height:2ex;'> | |||
${name}`; | |||
document.body.appendChild(a); | |||
} | |||
addCountryDiv('China', 'Beijing', 'cn'); | |||
addCountryDiv('Japan', 'Tokyo', 'jp'); | |||
addCountryDiv('South Korea', 'Seoul', 'kr'); | |||
</pre> | |||
<pre class='ans'> | |||
function addCountryDiv(name, capital, flag){ | |||
let a = document.createElement('div'); | |||
a.innerHTML = ` | |||
<img src='/flags/${flag}.png' | |||
style='height:2ex;border:solid;'> | |||
${name} <i>${capital}</i>`; | |||
document.body.appendChild(a); | |||
} | |||
addCountryDiv('China', 'Beijing', 'cn'); | |||
addCountryDiv('Japan', 'Tokyo', 'jp'); | |||
addCountryDiv('South Korea', 'Seoul', 'kr'); | |||
</pre> | |||
</div> | |||
==Write the schedule== | |||
We want to show the start time and end time for each event. | |||
<div class='qu'> | |||
<pre class='usr'> | |||
function addSchedule(name, timeStart, timeEnd){ | |||
let a = document.createElement('div'); | |||
a.innerHTML = `${name}`; | |||
document.body.appendChild(a); | |||
} | |||
addSchedule('Lecture', '13:00', '14:00'); | |||
addSchedule('Tutorial', '14:00', '15:30'); | |||
addSchedule('Lecture', '15:30', '16:00'); | |||
</pre> | |||
<pre class='ans'> | |||
function addSchedule(name, timeStart, timeEnd){ | |||
let a = document.createElement('div'); | |||
a.innerHTML = `${name} ${timeStart} ${timeEnd}`; | |||
document.body.appendChild(a); | |||
} | |||
addSchedule('Lecture', '13:00', '14:00'); | |||
addSchedule('Tutorial', '14:00', '15:30'); | |||
addSchedule('Lecture', '15:30', '16:00'); | |||
</pre> | |||
</div> | |||
==Write the schedule with Edinburgh time== | |||
You can use this function to calculate Edinburgh time: | |||
<pre> | |||
function edinburgh(t){ | |||
let hm = t.split(':'); | |||
let m = 60*parseInt(hm[0])+parseInt(hm[1]); | |||
let e = m - 60*5.5; | |||
return (Math.floor(e/60).toString().padStart(2,'0'))+':'+ | |||
((e%60).toString().padStart(2,'0')); | |||
} | |||
</pre> | |||
The times shown are in the Yangon time zone. Show the Edinburgh time in brackets. Edinburgh time is 5.5 hours earlier than Yangon time. | |||
<div class='qu' data-width=280> | |||
<pre class='usr'> | |||
function edinburgh(t){ | |||
let hm = t.split(':'); | |||
let m = 60*parseInt(hm[0])+parseInt(hm[1]); | |||
let e = m - 60*5.5; | |||
return (Math.floor(e/60).toString().padStart(2,'0'))+':'+ | |||
((e%60).toString().padStart(2,'0')); | |||
} | |||
function addSchedule(name, timeStart, timeEnd){ | |||
let a = document.createElement('div'); | |||
a.innerHTML = `${name} ${timeStart} ${edinburgh(timeStart)}`; | |||
document.body.appendChild(a); | |||
} | |||
addSchedule('Lecture', '13:00', '14:00'); | |||
addSchedule('Tutorial', '14:00', '15:30'); | |||
addSchedule('Lecture', '15:30', '16:00'); | |||
</pre> | |||
<pre class='ans'> | |||
function edinburgh(t){ | |||
let hm = t.split(':'); | |||
let m = 60*parseInt(hm[0])+parseInt(hm[1]); | |||
let e = m - 60*5.5; | |||
return (Math.floor(e/60).toString().padStart(2,'0'))+':'+ | |||
((e%60).toString().padStart(2,'0')); | |||
} | |||
function addSchedule(name, timeStart, timeEnd){ | |||
let a = document.createElement('div'); | |||
a.innerHTML = `${name} ${timeStart} (${edinburgh(timeStart)}) ${timeEnd} (${edinburgh(timeEnd)})`; | |||
document.body.appendChild(a); | |||
} | |||
addSchedule('Lecture', '13:00', '14:00'); | |||
addSchedule('Tutorial', '14:00', '15:30'); | |||
addSchedule('Lecture', '15:30', '16:00'); | |||
</pre> | |||
</div> | |||
==Using a loop== | |||
<div class='qu'> | |||
* Another way to avoid copying chunks of code is to use a loop. | |||
<pre class='usr'> | |||
let cl = [ | |||
{name:'France', capital:'Paris', flag:'fr'}, | |||
{name:'Italy', capital:'Rome', flag:'it'}, | |||
{name:'Germany', capital:'Berlin', flag:'de'} | |||
]; | |||
for(let c of cl){ | |||
let a = document.createElement('div'); | |||
a.innerHTML = ` | |||
${c.name}`; | |||
document.body.appendChild(a); | |||
} | |||
</pre> | |||
<pre class='ans'> | |||
let cl = [{name:'France', capital:'Paris', flag:'fr'}, | |||
{name:'Italy', capital:'Rome', flag:'it'}, | |||
{name:'Germany', capital:'Berlin', flag:'de'}]; | |||
for(let c of cl){ | |||
let a = document.createElement('div'); | |||
a.innerHTML = ` | |||
<img src='/flags/${c.flag}.png' | |||
style='height:2ex;border:solid'> | |||
${c.name} <i>${c.capital}</i>`; | |||
document.body.appendChild(a); | |||
} | |||
</pre> | |||
</div> | |||
==Radio buttons== | |||
<div class='qu'> | |||
* You can create HTML elements such as a radio button: | |||
<pre> | |||
<label><input type=radio name='country'>France</label> | |||
</pre> | |||
<pre class='usr'> | |||
let cl = [ | |||
{name:'France', capital:'Paris', flag:'fr'}, | |||
{name:'Italy', capital:'Rome', flag:'it'}, | |||
{name:'Germany', capital:'Berlin', flag:'de'} | |||
]; | |||
for(let c of cl){ | |||
let d = document.createElement('div'); | |||
d.innerHTML = c.name; | |||
} | |||
</pre> | |||
<pre class='ans'> | |||
let cl = [{name:'France', capital:'Paris', flag:'fr'}, | |||
{name:'Italy', capital:'Rome', flag:'it'}, | |||
{name:'Germany', capital:'Berlin', flag:'de'}]; | |||
for(let c of cl){ | |||
let a = document.createElement('div'); | |||
a.innerHTML = ` | |||
<label><input type=radio name='country'>${c.name}</label>`; | |||
document.body.appendChild(a); | |||
} | |||
</pre> | |||
</div> | |||
==Radio buttons with images== | |||
<div class='qu'> | |||
* Add a flag to each radio button: | |||
<pre> | |||
<label><input type=radio name='country'>France</label> | |||
</pre> | |||
<pre class='usr'> | |||
let cl = [ | |||
{name:'France', capital:'Paris', flag:'fr'}, | |||
{name:'Italy', capital:'Rome', flag:'it'}, | |||
{name:'Germany', capital:'Berlin', flag:'de'} | |||
]; | |||
</pre> | |||
<pre class='ans'> | |||
let cl = [{name:'France', capital:'Paris', flag:'fr'}, | |||
{name:'Italy', capital:'Rome', flag:'it'}, | |||
{name:'Germany', capital:'Berlin', flag:'de'}]; | |||
for(let c of cl){ | |||
let a = document.createElement('div'); | |||
a.innerHTML = ` | |||
<label><input type=radio name='country'><img style='height:20px' src=/flags/${c.flag}.png></label>`; | |||
document.body.appendChild(a); | |||
} | |||
</pre> | </pre> | ||
</div> | </div> |
Latest revision as of 08:53, 15 October 2024
Create Content
You can create a div element an set the content.
We use the document method createElement and the DOM node method append
Change the code so that it says 'Hello world'
let e = document.createElement('div'); e.innerHTML = 'Hello'; document.body.append(e);
let e = document.createElement('div'); e.innerHTML = 'Hello world'; document.body.append(e);
Create img
You can create a img element and set the src. In this example you must set the src and the style of the new element a.
a.style = 'width:100px;border:solid;';
These are CSS properties.
let a = document.createElement('img'); a.src = '/flags/fr.png'; document.body.append(a);
let a = document.createElement('img'); a.src = '/flags/fr.png'; a.style = 'width:100px;border:solid;'; document.body.append(a);
Create multiple elements
- You can add several elements to the document.body.
- You can add elements to other elements.
- Change this code to match the model answer
- Can you see why the flag does not show?
let a = document.createElement('div'); a.innerHTML = 'Germany, '; let b = document.createElement('i'); b.innerHTML = 'Berlin'; a.appendChild(b); document.body.append(a); let c = document.createElement('img'); c.src = '/flags/de.png'; c.style = 'width:100px';
let a = document.createElement('div'); a.innerHTML = 'Germany, '; let b = document.createElement('i'); b.innerHTML = 'Berlin'; a.append(b); document.body.appendChild(a); let c = document.createElement('img'); c.src = '/flags/de.png'; c.style = 'width:100px'; document.body.append(c);
Setting complex innerHTML
You can put more complex HTML into an element. The backticks ` ` can span many lines.
Make the flags bigger - you can set the height to 2ex
let a = document.createElement('div'); a.innerHTML = ` <img src='/flags/gr.png' style='height:1ex'> Greece <i>Athens</i>`; document.body.appendChild(a); let b = document.createElement('div'); b.innerHTML = ` <img src='/flags/it.png' style='height:1ex'> Italy <i>Rome</i>`; document.body.appendChild(b);
let a = document.createElement('div'); a.innerHTML = ` <img src='/flags/gr.png' style='height:2ex'> Greece <i>Athens</i>`; document.body.appendChild(a); let b = document.createElement('div'); b.innerHTML = ` <img src='/flags/it.png' style='height:2ex'> Italy <i>Rome</i>`; document.body.appendChild(b);
Using functions
- You should avoid copying chunks of code.
- A well chosen function can help avoid that.
- Notice how string interpolation allows you to include variables in the string.
function addCountryDiv(name, capital, flag){ let a = document.createElement('div'); a.innerHTML = ` <img src='/flags/${flag}.png' style='height:2ex;'> ${name}`; document.body.appendChild(a); } addCountryDiv('China', 'Beijing', 'cn'); addCountryDiv('Japan', 'Tokyo', 'jp'); addCountryDiv('South Korea', 'Seoul', 'kr');
function addCountryDiv(name, capital, flag){ let a = document.createElement('div'); a.innerHTML = ` <img src='/flags/${flag}.png' style='height:2ex;border:solid;'> ${name} <i>${capital}</i>`; document.body.appendChild(a); } addCountryDiv('China', 'Beijing', 'cn'); addCountryDiv('Japan', 'Tokyo', 'jp'); addCountryDiv('South Korea', 'Seoul', 'kr');
Write the schedule
We want to show the start time and end time for each event.
function addSchedule(name, timeStart, timeEnd){ let a = document.createElement('div'); a.innerHTML = `${name}`; document.body.appendChild(a); } addSchedule('Lecture', '13:00', '14:00'); addSchedule('Tutorial', '14:00', '15:30'); addSchedule('Lecture', '15:30', '16:00');
function addSchedule(name, timeStart, timeEnd){ let a = document.createElement('div'); a.innerHTML = `${name} ${timeStart} ${timeEnd}`; document.body.appendChild(a); } addSchedule('Lecture', '13:00', '14:00'); addSchedule('Tutorial', '14:00', '15:30'); addSchedule('Lecture', '15:30', '16:00');
Write the schedule with Edinburgh time
You can use this function to calculate Edinburgh time:
function edinburgh(t){ let hm = t.split(':'); let m = 60*parseInt(hm[0])+parseInt(hm[1]); let e = m - 60*5.5; return (Math.floor(e/60).toString().padStart(2,'0'))+':'+ ((e%60).toString().padStart(2,'0')); }
The times shown are in the Yangon time zone. Show the Edinburgh time in brackets. Edinburgh time is 5.5 hours earlier than Yangon time.
function edinburgh(t){ let hm = t.split(':'); let m = 60*parseInt(hm[0])+parseInt(hm[1]); let e = m - 60*5.5; return (Math.floor(e/60).toString().padStart(2,'0'))+':'+ ((e%60).toString().padStart(2,'0')); } function addSchedule(name, timeStart, timeEnd){ let a = document.createElement('div'); a.innerHTML = `${name} ${timeStart} ${edinburgh(timeStart)}`; document.body.appendChild(a); } addSchedule('Lecture', '13:00', '14:00'); addSchedule('Tutorial', '14:00', '15:30'); addSchedule('Lecture', '15:30', '16:00');
function edinburgh(t){ let hm = t.split(':'); let m = 60*parseInt(hm[0])+parseInt(hm[1]); let e = m - 60*5.5; return (Math.floor(e/60).toString().padStart(2,'0'))+':'+ ((e%60).toString().padStart(2,'0')); } function addSchedule(name, timeStart, timeEnd){ let a = document.createElement('div'); a.innerHTML = `${name} ${timeStart} (${edinburgh(timeStart)}) ${timeEnd} (${edinburgh(timeEnd)})`; document.body.appendChild(a); } addSchedule('Lecture', '13:00', '14:00'); addSchedule('Tutorial', '14:00', '15:30'); addSchedule('Lecture', '15:30', '16:00');
Using a loop
- Another way to avoid copying chunks of code is to use a loop.
let cl = [ {name:'France', capital:'Paris', flag:'fr'}, {name:'Italy', capital:'Rome', flag:'it'}, {name:'Germany', capital:'Berlin', flag:'de'} ]; for(let c of cl){ let a = document.createElement('div'); a.innerHTML = ` ${c.name}`; document.body.appendChild(a); }
let cl = [{name:'France', capital:'Paris', flag:'fr'}, {name:'Italy', capital:'Rome', flag:'it'}, {name:'Germany', capital:'Berlin', flag:'de'}]; for(let c of cl){ let a = document.createElement('div'); a.innerHTML = ` <img src='/flags/${c.flag}.png' style='height:2ex;border:solid'> ${c.name} <i>${c.capital}</i>`; document.body.appendChild(a); }
Radio buttons
- You can create HTML elements such as a radio button:
<label><input type=radio name='country'>France</label>
let cl = [ {name:'France', capital:'Paris', flag:'fr'}, {name:'Italy', capital:'Rome', flag:'it'}, {name:'Germany', capital:'Berlin', flag:'de'} ]; for(let c of cl){ let d = document.createElement('div'); d.innerHTML = c.name; }
let cl = [{name:'France', capital:'Paris', flag:'fr'}, {name:'Italy', capital:'Rome', flag:'it'}, {name:'Germany', capital:'Berlin', flag:'de'}]; for(let c of cl){ let a = document.createElement('div'); a.innerHTML = ` <label><input type=radio name='country'>${c.name}</label>`; document.body.appendChild(a); }
Radio buttons with images
- Add a flag to each radio button:
<label><input type=radio name='country'>France</label>
let cl = [ {name:'France', capital:'Paris', flag:'fr'}, {name:'Italy', capital:'Rome', flag:'it'}, {name:'Germany', capital:'Berlin', flag:'de'} ];
let cl = [{name:'France', capital:'Paris', flag:'fr'}, {name:'Italy', capital:'Rome', flag:'it'}, {name:'Germany', capital:'Berlin', flag:'de'}]; for(let c of cl){ let a = document.createElement('div'); a.innerHTML = ` <label><input type=radio name='country'><img style='height:20px' src=/flags/${c.flag}.png></label>`; document.body.appendChild(a); }