描述
通过设计,大多数 jquery 代码会导致很多紧密耦合,例如选择器假定 html 的特定结构
var mySubnav = $("#navigation a.sub-menu");
如果相应的 html 发生变化,无论出于何种原因,
<a class="subMenu" .... </a>
功能被破坏。
问题
- 处理紧密耦合的最佳方法是什么?
- 有什么方法可以放松它?
答案,方法
- 使用 html 自定义数据属性将 css 与 js 逻辑分开。例如
data-submenu="true"
在 html 上添加并var mySubnav = $("[data-submenu]");
在 js 端使用。 - 实施可靠的测试环境
- 尽可能松散地耦合,使用最不具体的选择器,例如
$("a.sub-menu')
. 也可以看看 - 通过 (1) 预先检索对静态 DOM 元素的引用,以及 (2) 将选择器字符串存储在一个位置(在代码的顶部),从 jQuery 代码的主体中消除表示 CSS 选择器的实际字符串文字。
- 使用 javascript 框架,例如Backbone,它通过视图将 javascript 与 DOM 分离
- 由于事件管理,使用委托和实时耦合