diff --git a/docs/element-properties.mdx b/docs/element-properties.mdx index cbe470a..67f14f2 100644 --- a/docs/element-properties.mdx +++ b/docs/element-properties.mdx @@ -1,12 +1,72 @@ --- id: element-properties -title: Properties of DOM nodes +title: Element attributes and properties --- +import Admonition from "../components/Admonition" +import Accordion from "../components/Accordion" +import InternalLink from "../components/InternalLink" +import MDN from "../components/MDNBadge" + +### 1. tagName + +`Element.tagName : string` + +`.tagName` is a read-only property on any element, which returns the tag name in uppercase form. This is useful to identify type of a element. + +Ex. For a `
` element, tagName is `"DIV"`. + +```js +ele = document.querySelector("img"); +ele.tagName // "IMG" +``` + +:::note Text nodes don't have `tagName` + +Text nodes are not element, so they don't have any tagName - it'll just give `undefined`. + +::: + + +## Children and Content + +:::note Types of Children + +All elements will *generally* have 2 types of children - 1. element and 2. text node. +You can think of elements as other tags and text node as the text/content within a tag. + +```jsx +
+ This is // <- 1. text node + // <- 2. element + some text // 2.1. contains text node + +
+``` + +More importantly, if you are writing html by hand - it'll often introduce **invisible text nodes** which has only whitespace in it. Example - +```jsx +
+
+
+ +container.childNodes // [text, div, text] +// extra text nodes are created at start and end +// which only contains newline and space characters +``` + +If you recall, *Element* extends from *Node* - so all elements are nodes. That means, every child is technically a node. +This is important because some properties/methods return **only those child nodes which are element**, whereas others **return all child nodes** (both element and text node). For ex, `ele.childNodes` returns all child nodes, but `ele.children` returns only child elements. + +Always use the one which is more suitable for your case. Remember, even if you haven't added any "text" between a tag, it can have invisible text nodes due to spaces and newline characters. + +Read more about [other types of nodes](https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType) and how [whitespace works in html](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Whitespace). +::: + +