Skip to content

Attributes and Properties

Mastering JavaScript requires understanding how it interacts with the Document Object Model (DOM). This tutorial covers DOM attributes and properties, explaining how to read, modify, and synchronize them to manipulate web pages dynamically.

Introduction to the DOM in JavaScript

The DOM represents a web page as a hierarchical tree of objects, enabling programming languages like JavaScript to interact with the page's content, style, and structure. Each element in the HTML document is mirrored as an object in the DOM, and these objects have properties and attributes that can be manipulated using JavaScript.

Differences Between Attributes and Properties

Although the terms "attributes" and "properties" are often used interchangeably, they have distinct meanings in the context of the DOM:

  • Attributes: These are defined in the HTML code. They provide additional information about HTML elements. Attributes are always strings and are accessed using methods like getAttribute() and setAttribute().
  • Properties: These are the characteristics of DOM objects that represent HTML elements. Properties can be of any data type, such as boolean, string, or number, and are accessed directly using the dot notation.

Note on synchronization: For certain attributes (like class, id, value, and checked), changes to the attribute automatically update the corresponding property, and vice versa. However, this two-way sync is not guaranteed for all attributes.

Code Example: Accessing Attributes and Properties


html
<div id="demo" class="sample" data-level="1">Hello, World!</div>
<br />
<div>first getAttributes result (data-level): <span id="1"></span></div>
<div>className property: <span id="2"></span></div>
<script>
  const demoElement = document.getElementById("demo");
  const span1 = document.getElementById("1");
  const span2 = document.getElementById("2");

  // Accessing an attribute
  let classAttribute = demoElement.getAttribute("data-level");  // Output: "1"
  span1.innerHTML = classAttribute;
  
  // Accessing a property
  // Note: 'class' is a reserved keyword in JS, so the property is named 'className'
  const classNameProperty = demoElement.className;  // Output: "sample"
  span2.innerHTML = classNameProperty;
</script>

Result

Manipulating DOM Elements

Understanding how to manipulate DOM elements is crucial for dynamic web development. JavaScript offers several methods to interact with both attributes and properties.

Setting Attributes

Use the setAttribute() method to add a new attribute or change the value of an existing attribute on an HTML element.

Code Example: Setting Attributes


html
<div id="demo" class="sample">Hello, World!</div>
<br />
<div>className property after change: <span id="span1"></span></div>
<script>
  const demoElement = document.getElementById("demo");
  const span1 = document.getElementById("span1");
  
  // Changing the attribute
  demoElement.setAttribute("class", "changed");
  // The property updates automatically due to attribute-property synchronization
  span1.innerHTML = demoElement.className;
</script>

Result

This code snippet changes the class attribute of the div element to "changed".

Removing Attributes

To completely remove an attribute from an HTML element, use the removeAttribute() method. This is useful when you want to strip an element of a specific behavior or style defined by an attribute.

Example:demoElement.removeAttribute("class");

Reassigning Properties

Properties of DOM elements can be easily reassigned directly using dot notation, allowing for a more flexible manipulation of the element's characteristics.

Code Example: Modifying Properties


html
<div id="demo" class="sample">Hello, World!</div>
<br />
<div>className property after change: <span id="span1"></span></div>
<script>
  const demoElement = document.getElementById("demo");
  const span1 = document.getElementById("span1");

  // Changing the property
  // Note: 'class' is a reserved keyword in JS, so the property is named 'className'
  demoElement.className = "changed";
  span1.innerHTML = demoElement.className;
</script>

Result

This example changes the className property of the div element, demonstrating how properties can be used to control element characteristics dynamically.

Custom Data Attributes

Developers can also define custom data attributes prefixed with data-, which is especially useful for storing extra information that does not have any visual representation.

Code Example: Custom Data Attributes


html
<div id="demo" data-author="Jane Doe" data-year="2022">Information Panel</div>
<br />
<div>author: <span id="1"></span></div>
<div>year: <span id="2"></span></div>
<script>
  const element = document.getElementById("demo");
  const span1 = document.getElementById("1");
  const span2 = document.getElementById("2");
  span1.innerHTML = element.dataset.author;
  span2.innerHTML = element.dataset.year;
</script>

Result

Conclusion

Understanding and utilizing the DOM's attributes and properties effectively can significantly enhance your capabilities as a JavaScript developer. By mastering these concepts, you can manipulate web page elements dynamically and create richer, more interactive web applications. This knowledge is crucial for any developer looking to advance in the field of web development.

Practice

Which statements accurately describe the differences between attributes and properties in the DOM, as explained in the JavaScript tutorial?

Dual-run preview — compare with live Symfony routes.