javascript - javascript 中 id/class 属性的策略

标签 javascript jquery class

假设您有一个帖子列表,并且每个帖子都有一个 ID。

现在可以有许多按钮、字段等与此帖子交互。
(编辑/删除/赞成/标题..仅举几例)

我已将 id 包含在每个可交互的元素中,并用它来引用其他元素。 (例如,当用户单击编辑按钮时,我找到具有相同 id 的文本区域来更改外观)

<div class='post' data-post-id='3'>
  <div class='upvote' data-post-id='3'>
    {{upvote}}
  </div>
  <div class='textarea' data-post-id='3'>
  </div>
  <div class='buttons'>
    <button class='btn-edit' data-post-id='3' />
    <button class='btn-delete' data-post-id='3' />
    <button class='btn-upvote' data-post-id='3' />
  </div>
</div>

我对 javascript 相当陌生,感觉这很尴尬。
是否有更好的方案(或策略)来提供可使用的标识符?

最佳答案

我只需将 data-post-id 放在帖子的顶级 div 上(使用 post 类)。然后,无论何时您需要它,如果您的起点是该 div 中的元素之一,只需使用 closest找到它,例如假设 this 是按钮之一。然后:

var postId = $(this).closest("div.post").attr("data-post-id");

例如,我假设所有这些帖子都在某种容器中,我将其称为 div.container。您可以为各种按钮使用委托(delegate)处理程序,如下所示:

$("div.container").on("click", ".btn-edit", function() {
    var postId = $(this).closest("div.post").attr("data-post-id");
    // ...handle the edit click
});
<小时/>

旁注:我使用 .attr("data-post-id") 来检索上面的帖子 ID。很多人会告诉您使用 .data("post-id")。虽然这有效,但除非您要对数据执行其他操作,否则就太过分了。 .data 方法使用 jQuery 管理的元素外存储来管理与元素关联的数据,并从 data-* 属性初始化该数据。如果您对 data-* 属性的唯一用途是读取它,那么 .data 就太过分了。大多无害,但杀伤力太大。

关于javascript - javascript 中 id/class 属性的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19786417/

相关文章:

javascript - 如何使用 firebase 从 web 向 android 发送推送通知?

Python - 类型错误 : 'int' object is not callable

java - 找不到符号java错误

eclipse - 当我重命名我的类时,我可以让 Eclipse 更改我的注释吗?

javascript - 点击按钮后如何将 ListView 向下滚动到底部(例如使用 scrollToIndex )? NativeScript-Vue

javascript - Knockout JS 中的多个扩展器不起作用

javascript - 如何从c#wpf调用js函数

javascript - 将选择输入字段限制为 0、3、5 和 8

javascript - 在 flex 容器中设置子div的宽度

javascript - 悬停时从数据列表中获取当前值