当你可以作到修改一个组件而不须要更改其余组件时,就作到了松耦合,松耦合对于代码可维护性来讲是相当重要的。javascript
在 ie8 和更早版本的浏览器中有一个特性,即 css 表达式。以下:css
/* 很差的写法 */ .box { width: expression(document.body.offsetWidth + "px"); }
ie9 已经再也不支持 css 表达式了。
这种写法自2013年我开始接触 web 以来一直没有见过。html
/* 很差的写法 */ element.style.color = "red"; element.style.left = "10"px; element.style.visibility = "visible"; /* 好的写法 * 在 css 中定义样式 , 在 javascript 中 经过 className 通讯 */ // 在 css 中 .reveal { color: red; left: 10px; visibility: visible; } // 在 javascript 中 element.className += "reveal"; // 原生写法 $(element).addClass("reveal"); // 若是是 jQuery
<!-- 很差的写法 --> <button onclick="doSomething()" id="action">click me</button>
咱们要避免使用 onclick 等 on 属性来绑定一个事件处理程序。
应该使用 id 保持 javascript 和 html 的沟通。java
// 好的写法, 如使用 jQuery $("#action").on("click",doSomething);
<ul id="mylist"><!--<li id="item%s"><a href="%s">%s</a></li>--> <li><a href="/item/1">First item</a></li> <li><a href="/item/2">Second item</a></li> <li><a href="/item/3">Third item</a></li> </ul>
注释也是 DOM 的一部分node
function addItem(url, text) { var mylist = document.getElementById("mylist"), templateText = mylist.firstChild.nodeValue; result = sprintf(template, url, text); div.innerHTML = result; mylist.insertAdjacentHTML("beforeend", result); } // 用法 addItem("item/4", "Four item");
浏览器会默认地将<script>元素中的内容识别为 JavaScript 代码, 但你能够经过给 type 赋值为浏览器不识别的类型,来告诉浏览器这不是一段 javascript 脚本。web
<script type="text/x-my-template" id="list-item"> <li><a href="%s">%s</a></li> </script>
你能够经过<script>标签的 text 属性来提取模板文本。
这样 addItem() 函数就会变成这样。express
function addItem(url, text) { var mylist = document.getElementById("mylist"), script = document.getElementById("list-item"), templateText = script.test, result = sprintf(template, url, text), div = document.createElement("div"); div.innerHTML = result.replace(/^\s*/, ""); list.appendChild(div.firstChild); } // 用法 addItem("/item/4", "Four item");