What is / are some recommended ways to write JavaScript as to control behavior of showing HTML on screen, while keeping well-maintainable code? Basically, I started to look for ways to keep HTML/CSS out of JS (assuming it's the recommended practice), but I might as well check into the latest ways of writing JavaScript well. See below for more details.
My specific problem
I have JS files that look something like this:
var selection = eval("(" + document.getElementById("result").innerHTML + ")"); if (selection[index].selected) { result += '<TABLE class="list_grey" style="float: left; margin-left: 20px;">'; result += '<TR>'; result += '<TH colspan="2">Data</TH>'; result += '</TR>'; var flag = "All"; if (selection[index].flag == 'P') flag = "Premium"; result += '<TR>'; result += '<TD>Flag</TD>'; result += '<TD>' + flag + '</TD>'; result += '</TR>'; result += '</TABLE>'; } document.getElementById('final').innerHTML = result;
In fact, entire JS codebase I work with is plagued by this. You can see here HTML, CSS JS, and JSON (selection
var gets its content from JSON prepared by PHP earlier). I want to make this better.
My experience level
I am new to writing good JS or to having experience with JS patterns, tools, tips, techniques, and so on. I am looking for help with those.
My specific issue:
I have a series of tables and data to be shown to the user. It is a "series", so user can select which "element" of the series is currently active on the screen. An "element" is essentially an HTML partial (with JS and CSS and HTML), and is described below:
"element": a block of HTML that serves as static data (tables, titles, and divs), and a long JSON string that encodes some previously prepared data. JSON string is assigned to a JS variable and that JSON data/JS variable stores records numbered 1
through n
, where each i
holds various data to be injected into the block of HTML, forming "HTML partial".
I have navigational buttons on the screen, allowing user to step through the "series", where the HTML is the same, but the data inside it changes.
I am looking for a good way to write this "step through HTML blocks" functionality using what is considered to be good maintainable JS code. Namely, I am looking for the following characteristics:
- separation of concern
- cleaner code - I need tools or techniques to allow me to avoid mixing HTML with JS with CSS (as in seen my example), unless where necessary or convenient. (what I have now is not convenient)
- I prefer techniques rather than tools, but open to considering/evaluating well-established tools. By "techniques", I mean pure JS, HTML, CSS, PHP approaches. By "tools", I currently know and trust jQuery, and for other tools prefer to have some track record to them.
Note on HTML visibility/hiding
I should also perhaps note that in my case HTML is static, aka it does not change structurally, as I step through the elements. However, based on the JSON/selection variable, some blocks of HTML are show/hidden (as is shown in my example). Once they are shown/hidden at page render time, they stay shown/hidden throughout stepping through selection.