javascript - 编写干净的 jQuery

标签 javascript jquery coding-style custom-data-attribute

考虑这个 HTML

<div id="container">
    <ul id="someID">
    <li id="someID1">
      <div id="someID2">
        <div class="someClass">
           <label>labelText</label>     
        </div>
      </div>
    </li>
    <li>2</li>
    <li>3</li>
    </ul>
</div>

及其脚本

<script>
$(function(){
$("#container label").click(function(){
    $(this).text("labelTextChanged");
});
})
</script>

让这个代码由其他人编写。现在我想将文本 labelTextChanged 更改为新的内容,例如 labelTextChangedThen (这只是一个示例,有时我需要更改很多功能)。但现在从 DOM 中找到附加事件很难吗?在使用 jQuery 编写代码时如何避免此类问题?

仅使用属性(自定义属性)来选择元素是一个好方法吗? (如Angularjs)

注意:实际上,情况可能更好,也可能更糟。

最佳答案

有很多方法可以编写干净的代码。我更喜欢将处理程序方法(使用命名函数)与处理代码分开,使用数据属性来查询和使用 event delegation 。对于您的示例,代码可以重写为:

function changeLabelText(e){
    var self = $(this);
    self.text(self.attr('data-changeOnClick'));
}

$(document).on('click', '[data-changeOnClick]', changeLabelText);

哪里<label>将变成<label data-changeOnClick="[changed text]">

在这种情况下,稍后更改标签文本就像更改 data-changeOnClick 一样简单html 中的属性。此外,可以轻松地将属性添加到 html 中的任何元素,这都会触发点击处理程序。

编写单独的处理程序方法还会显示上述“视觉事件 2”小书签中的方法。

此外,我总是在文档末尾加载脚本(就在结束 </body> 标记之前),以避免必须将方法分配包装在 $(function() {/*...*/} ) 内。或者更一般地说必须使用文档加载处理。

查看此jsFiddle

关于javascript - 编写干净的 jQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20373857/

相关文章:

c - 如何打印自定义字符

javascript - 将 Javascript 字符串转换为日期

javascript - 当从服务器的获取响应中排除时,删除属性 Backbone 模型

javascript - 用于模拟鼠标输入的 Angular Directive(指令)?

javascript - 在自定义 div 上滚动时显示隐藏元素

javascript - jQuery fadeIn() 方法不起作用……

c++ - eclipse 中是否有任何插件或附加组件可用于根据一组编码标准检查/(如果有的话设置自己的规则)C/C++ 源代码?

javascript - 访问 Google Firestore 集合的最后 N 个文档

javascript - 使用javascript将二进制数据下载到文件中

coding-style - 防御性编码实践