From 343db2a1a788a5731bcc010631801e52b9c47f66 Mon Sep 17 00:00:00 2001 From: Ayo Date: Mon, 14 Oct 2019 06:18:17 +0800 Subject: [PATCH] add post about using js dom interfaces --- ...2019-10-14-forcing-javascript-dom-types.md | 139 ++++++++++++++++++ assets/images/javascript.jpg | Bin 0 -> 19055 bytes assets/images/javascript_small.jpg | Bin 0 -> 19055 bytes 3 files changed, 139 insertions(+) create mode 100644 _posts/2019-10-14-forcing-javascript-dom-types.md create mode 100644 assets/images/javascript.jpg create mode 100644 assets/images/javascript_small.jpg diff --git a/_posts/2019-10-14-forcing-javascript-dom-types.md b/_posts/2019-10-14-forcing-javascript-dom-types.md new file mode 100644 index 0000000..309593c --- /dev/null +++ b/_posts/2019-10-14-forcing-javascript-dom-types.md @@ -0,0 +1,139 @@ +--- +title: "How to Force JavaScript Variables to use Specific DOM APIs" +permalink: "/forcing-js-dom-types" +description: "To take advantage of code completion for Javascript, here's a smart way to force JS DOM variables to use a specific DOM API interface" +keywords: "" +image: "javascript" +image-attrib: "JavaScript using HTMLTableElement instead of HTMLElement, or other specific DOM APIs" +--- + +To take advantage of JavaScript *intellisense* and code completion when using a certain *awesome* text editor *\*ehem\** [VS Code](https://code.visualstudio.com/) *\*ehem\**, you need to be able to declare the correct interfaces for variables containing DOM elements. + +Yeah, I know this works like magic in TypeScript. + +But if you're working with pure JavaScript, how do you do it? + +Okay, I'll answer that in this post obviously. + +## How to Force JS Variables containing DOM Elements to use a specific HTML interface + +Here goes. + +For example, if you want to make a variable use a specific DOM interface like `HTMLTableElement` and not the generic `HTMLELement`, just do: + +```javascript +var x = document.createElement('table') // -> returns HTMLTableElement +``` + +before you assign it... + +```javascript +x = document.getElementById('table-id') // -> always returns HTMLELement +``` + +If you go straight to doing `document.getElementById` the variable will have the generic type `HTMLElement`. + +Important hint: the string parameter for `createElement` (`'table'` in our example above) will determine the type/interface that the variable `x` will use. + +## Uh, okay. But, uhm, why... woud I want to do that? + +Well, this way, the variable `x` will have the type `HTMLTableElement` all the way in your code. + +Then, intellisense will work like magic and you will get more helpful code completion like, for our our example... + +```javascript +x.insertRow() // -> will be detected if x is HTMLTableElement, NOT if x is HTMLElement +``` + +`x` will now get code completion for all the methods and other awesomeness that `HTMLTableElement` has and `HTMLElement` doesn't. + + +You see, `HTMLElement` has a lot of great methods but when working on a specific HTML element, there are more options for you if you use the correct interface (which, most probably, extends `HTMLElement`, meaning they also get its methods and other awesomeness). + +## Okay... Uh, I still don't know what you're talking about though... + +What are you doing here then? This is for people who know what I'm talking about! + +(But if you want something really basic, come back again! I'm writing something up for people with zero experience, but who wants to get into coding.) + +Anyway... + +Here's the full list of specific HTML Element APIs: +- HTMLAnchorElement +- HTMLAreaElement +- HTMLAudioElement +- HTMLBRElement +- HTMLBaseElement +- HTMLBaseFontElement +- HTMLBodyElement +- HTMLButtonElement +- HTMLCanvasElement +- HTMLContentElement +- HTMLDListElement +- HTMLDataElement +- HTMLDataListElement +- HTMLDialogElement +- HTMLDivElement +- HTMLDocument +- HTMLEmbedElement +- HTMLFieldSetElement +- HTMLFormControlsCollection +- HTMLFormElement +- HTMLFrameSetElement +- HTMLHRElement +- HTMLHeadElement +- HTMLHeadingElement +- HTMLHtmlElement +- HTMLIFrameElement +- HTMLImageElement +- HTMLInputElement +- HTMLIsIndexElement +- HTMLKeygenElement +- HTMLLIElement +- HTMLLabelElement +- HTMLLegendElement +- HTMLLinkElement +- HTMLMapElement +- HTMLMediaElement +- HTMLMetaElement +- HTMLMeterElement +- HTMLModElement +- HTMLOListElement +- HTMLObjectElement +- HTMLOptGroupElement +- HTMLOptionElement +- HTMLOptionsCollection +- HTMLOutputElement +- HTMLParagraphElement +- HTMLParamElement +- HTMLPictureElement +- HTMLPreElement +- HTMLProgressElement +- HTMLQuoteElement +- HTMLScriptElement +- HTMLSelectElement +- HTMLShadowElement +- HTMLSourceElement +- HTMLSpanElement +- HTMLStyleElement +- HTMLTableCaptionElement +- HTMLTableCellElement +- HTMLTableColElement +- HTMLTableDataCellElement +- HTMLTableElement +- HTMLTableHeaderCellElement +- HTMLTableRowElement +- HTMLTableSectionElement +- HTMLTemplateElement +- HTMLTextAreaElement +- HTMLTimeElement +- HTMLTitleElement +- HTMLTrackElement +- HTMLUListElement +- HTMLUnknownElement +- HTMLVideoElement + +Whoa, quite a lot, right? + +For more info, you chan start with the `HTMLELement` Documentation [found here](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement) then read up on specific APIs from there. + diff --git a/assets/images/javascript.jpg b/assets/images/javascript.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5007e507c361e6775cca0dde602297142bda0a83 GIT binary patch literal 19055 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 S*KxUwS@5S2+r&Eh`hNf<^Ah9$ literal 0 HcmV?d00001 diff --git a/assets/images/javascript_small.jpg b/assets/images/javascript_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5007e507c361e6775cca0dde602297142bda0a83 GIT binary patch literal 19055 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 S*KxUwS@5S2+r&Eh`hNf<^Ah9$ literal 0 HcmV?d00001