Difference between revisions of "DOM Changing elements"

From ProgZoo
Jump to navigation Jump to search
 
(12 intermediate revisions by the same user not shown)
Line 40: Line 40:
<div class='qu'>
<div class='qu'>
You can use document.querySelector to find elements. The pattern given is very like the patterns you use in CSS.
You can use document.querySelector to find elements. The pattern given is very like the patterns you use in CSS.
*'img' will match a &lt;img/> element
*'#fr' will match an element with id '''fr'''
<div class=imper>Make the width of the first img 50px</div>
<div class=imper>Make the width of the first img 50px</div>


Line 47: Line 49:
<pre class='ans'>
<pre class='ans'>
document.querySelector('img').style.width = '50px';
document.querySelector('img').style.width = '50px';
</pre>
</div>
==Find many elements, change them all==
<div class='qu'>
You can use document.querySelectorAll to lots of elements.
*You can visit every element in the list with forEach
*The default program changes every img element
<div class=imper>Make the width of all img 50px</div>
<pre class='usr'>
document.querySelectorAll('img').forEach(i =>{
  i.style.width = '75px';
})
</pre>
<pre class='ans'>
document.querySelectorAll('img').forEach(i=>{
  i.style.width = '50px';
});
</pre>
</div>
==Give the flags borders==
<div class='qu'>
<div class=imper>Make the width of all img 50px, make the border solid</div>
<pre class='usr'>
</pre>
<pre class='ans'>
document.querySelectorAll('img').forEach(i=>{
  i.style.width = '50px';
  i.style.border = 'solid';
});
</pre>
</div>
==Give the flags borders, make the heading bigger==
<div class='qu'>
* A pattern such as <code>#countries>div>div</code> will match the node containing the country name
* You can use <code>i.style.fontSize = '200%'</code> to make the text in element <code>i</code> twice the size.
<div class=imper>Make the width of all img 50px, make the border solid</div>
<pre class='usr'>
document.querySelectorAll('img').forEach(i=>{
  i.style.width = '50px';
  i.style.border = 'solid';
});
</pre>
<pre class='ans'>
document.querySelectorAll('img').forEach(i=>{
  i.style.width = '50px';
  i.style.border = 'solid';
});
document.querySelectorAll('#countries>div>div').forEach(i=>{
  i.style.fontSize = '200%';
});
</pre>
</div>
==Remove France==
<div class='qu'>
The element with id '''fr''' must go.
<div class=imper>Use .remove() to remove France</div>
<pre class='usr'>
</pre>
<pre class='ans'>
document.querySelector('#fr').remove();
</pre>
</div>
==Swap the order==
<div class='qu'>
You can use append to reinsert an element.
*You must find the list of countries
*You must find the target country
*You must append the target to the list
<div class=imper>Use .append() to put France at the end</div>
<pre class='usr'>
</pre>
<pre class='ans'>
document.getElementById('countries')
  .append(document.getElementById('fr'));
</pre>
</pre>
</div>
</div>

Latest revision as of 16:32, 14 August 2022

 
 <div id='countries'> 
  <div id='fr'>
	<div>France</div>
	<img src='/flags/fr.gif'/>
  </div>
  <div id='fi'>
	<div>Finland</div>
	<img src='/flags/fi.gif'/>
  </div>
 </div>

In these examples the web page contains the following content.

<div id='countries'> 
 <div id='fr'>
   <div>France</div>
   <img src='/flags/fr.gif'/>
 </div>
 <div id='fi'>
   <div>Finland</div>
   <img src='/flags/fi.gif'/>
 </div>
</div>

Change an element based on id

If the element you want to change has an id you can use getElementById

  • The html above has a div with id "countries"
Change the countries div to have silver background color.
let e = document.getElementById('countries');
e.style.backgroundColor = 'pink';
let e = document.getElementById('countries');
e.style.backgroundColor = 'silver';

Find an element and change it

You can use document.querySelector to find elements. The pattern given is very like the patterns you use in CSS.

  • 'img' will match a <img/> element
  • '#fr' will match an element with id fr
Make the width of the first img 50px
document.querySelector('img').style.width = '75px';
document.querySelector('img').style.width = '50px';

Find many elements, change them all

You can use document.querySelectorAll to lots of elements.

  • You can visit every element in the list with forEach
  • The default program changes every img element
Make the width of all img 50px
document.querySelectorAll('img').forEach(i =>{
  i.style.width = '75px';
})
document.querySelectorAll('img').forEach(i=>{
  i.style.width = '50px';
});

Give the flags borders

Make the width of all img 50px, make the border solid

document.querySelectorAll('img').forEach(i=>{
  i.style.width = '50px';
  i.style.border = 'solid';
});

Give the flags borders, make the heading bigger

  • A pattern such as #countries>div>div will match the node containing the country name
  • You can use i.style.fontSize = '200%' to make the text in element i twice the size.
Make the width of all img 50px, make the border solid
document.querySelectorAll('img').forEach(i=>{
  i.style.width = '50px';
  i.style.border = 'solid';
});
document.querySelectorAll('img').forEach(i=>{
  i.style.width = '50px';
  i.style.border = 'solid';
});

document.querySelectorAll('#countries>div>div').forEach(i=>{
  i.style.fontSize = '200%';
});

Remove France

The element with id fr must go.

Use .remove() to remove France

document.querySelector('#fr').remove();

Swap the order

You can use append to reinsert an element.

  • You must find the list of countries
  • You must find the target country
  • You must append the target to the list
Use .append() to put France at the end

document.getElementById('countries')
  .append(document.getElementById('fr'));