javascript - 用于传递变量的脏 HTML 或脏 jQuery?
问题描述
我必须将变量传递给 jQuery。我看到有两种不同的方法:
干净的 HTML,肮脏的 jQuery:
<div class="itemContainer" data-id="1">
Item information
<input type="button" class="rename">
<input type="button" class="delete">
</div>
$('.rename').click(function() {
var id = $(this).parent().attr('data-id');
});
$('.delete').click(function() {
var id = $(this).parent().attr('data-id');
});
优点:干净,没有多余的 HTML,
缺点:不是很干净的 jQuery,如果 DOM 结构发生变化,很难检测到错误,并且必须在 2 个地方进行修复
干净的 jQuery,肮脏的 HTML:
<div class="itemContainer">
Item information
<input type="button" class="rename" data-id="1">
<input type="button" class="delete" data-id="1">
</div>
$('.rename').click(function() {
var id = $(this).attr('data-id');
});
$('.delete').click(function() {
var id = $(this).attr('data-id');
});
优点:干净的 jQuery,即使 DOM 结构改变也能工作
缺点:不太干净,多余的 HTML,
您更喜欢使用哪一个?
解决方案
您的第一个 HTML 结构是更好的实现,因为它避免了相同data-id
属性的重复。
对于 jQuery,您可以通过用逗号 ( ,
) 分隔选择器来使用单个事件处理程序,并且可以使用它closest()
来查找所需的父元素。这更加健壮,因为您可以根据需要更改该父级中的 HTML 结构,并且只要单击的元素仍然是子节点,它就不会破坏 JS 逻辑。最后,请注意,您应该尽可能使用data()
来获取/设置数据属性,而不是attr()
. 尝试这个:
$('.rename, .delete').click(function() {
var id = $(this).closest('.itemContainer').data('id');
console.log(id);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="itemContainer" data-id="1"> Item information
<input type="button" class="rename" value="Rename" />
<input type="button" class="delete" value="Delete" />
</div>
<div class="itemContainer" data-id="99"> Item information
<p>
Extra information...
<div class="another-child">
<input type="button" class="rename" value="Rename" />
<input type="button" class="delete" value="Delete" />
</div>
</p>
</div>
推荐阅读
- spring-boot - WildFly 14:org.apache.tomcat.websocket.server.WsServerContainer 类无法转换为 io.undertow.websockets.jsr.ServerWebSocketContainer 类
- android - 如何在 Android 8.1 及更高版本中更改默认通知
- mediawiki - 如何让 MediaWiki 搜索忽略重音符号?
- c++ - OpenGL 2D modelToWorld 矩阵不起作用
- c++ - 虚拟继承不适用于特定的 g++ 版本
- laravel - Laravel 5.7 未定义变量
- javascript - 我如何为我访问的每个页面执行这行代码,而不是在我单击书签时?
- r - 修改现有代码以将 geom_count 插入 ggplot
- ubuntu - 如何使用 MIPI 相机在 NanoPC T4 中获取 cam(0)?
- java - 在 intellij idea 中设置 tomcat 的问题