识别页面上动态生成的内容

发布于 2024-07-26 19:51:02 字数 704 浏览 6 评论 0原文

识别页面上动态生成的元素的最佳实践方法是什么?

让我解释。 我有一个元素列表,页面上可以有用户定义的元素数量。 其中每一项都对应一个项目,每个项目都有自己的 id。 现在,用户可以编辑或删除页面上的这些元素,并且这些操作是通过 jQuery 处理的。 每个元素都带有一个可以执行的操作(即删除和编辑)的链接。

现在的问题是知道用户选择了哪个元素。 为了解决这个问题,我为每个链接提供了元素的 ID 作为 ID 属性,然后使用 jQuery 获取该属性:

<a href="#" class="delete" id="<%= Model.elementID%>">Delete</a>

<script type="text/javascript">
    $(".delete").live("click", function (event) {
        event.preventDefault();
        var elementID = $(this).attr("id");
        //other code
    });
</script>

这显然远非理想,因为这意味着许多 DOM 元素可能具有相同的 ID。 或者,我可以创建自己的属性,例如 elementID,但我相信这违反了标准。

那么你能推荐什么。 如何识别页面上动态生成的元素?

What is the best-practise way of Identifying dynamically generated element on page?

Let me explain. I have a list of elements, there can be as few or as many elements as the user defines, on a page. Each one of these corresponds to an item each with it's own id. Now, the user has the ability to edit or delete these elements on the page and these operations are handled with jQuery. Each element comes with a link per operation they can action (i.e delete and edit).

Now a problem is knowing which element the user has selected. To deal with this I give each link the ID of the element as an ID attribute, which I then obtain using jQuery:

<a href="#" class="delete" id="<%= Model.elementID%>">Delete</a>

<script type="text/javascript">
    $(".delete").live("click", function (event) {
        event.preventDefault();
        var elementID = $(this).attr("id");
        //other code
    });
</script>

This is obviously far from ideal as it would mean many DOM elements could have the same ID. Alternatively I could create my own attribute such as elementID but I believe this breaks standards.

So what could you recommend. How can I identify dynamically generated elements on a page?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

稳稳的幸福 2024-08-02 19:51:02

我已经为我的网站做了很多这样的事情,我的解决方案是您的起点和一些评论的组合:

使用命名约定,例如“element_type:id:action”。 因此,您的示例生成为“element:23:delete”。 然后你可以 split() 你抓取的 .attr("id") 并确定它是什么("报告" vs "文件夹")、id 以及你想要做什么("删除"、"编辑") “, “移动”)。

这对我来说非常有效,并且具有很强的可扩展性。

不过,我会保留该类,以便您可以轻松地通过 jquery 附加事件。

詹姆士

I've done this quite a bit for my sites and my solution is a combination of where you started from and some of the comments:

Use a naming convention, like "element_type:id:action". So your example's generated be "element:23:delete". Then you can split() the .attr("id") that you've grabbed and determine what it is ("report" vs "folder"), the id, and what you want to do ("delete", "edit", "move").

This has worked out very well for me, and is very scalable.

I'd keep the class, though, so that you can easily attach events via jquery.

James

秋心╮凉 2024-08-02 19:51:02

为什么不直接添加一个类呢? 这也解决了拥有多个 id 的问题,正如您所回避的那样,这是不允许的,并且会导致后续 jquery 操作出现重大问题。

<a href="#" class="delete" id="<%= Model.elementID%>">Delete</a>

  $(".delete").live("click", function(event) {
      event.preventDefault();
      //other code
      $(yourNewElement).addClass('noob');

   });

Why not just add a class instead. This also solves the issue of having multiple id's which as you eluded to is not allowed and will cause major issues with subsequent jquery operations.

<a href="#" class="delete" id="<%= Model.elementID%>">Delete</a>

  $(".delete").live("click", function(event) {
      event.preventDefault();
      //other code
      $(yourNewElement).addClass('noob');

   });
情独悲 2024-08-02 19:51:02

您可以做的另一件事是:

<a href="#<%= Model.elementID%>" class="delete"> Delete </a>
$(".delete").live("click", function(event) {
    event.preventDefault();
    var elementID =  $(this).attr("href");
    // strip the preceding '#'

    // rest of your code
});

PS:一切都没有最佳实践。 有些事情只需要一个新的方法。

干杯,jrh

One other thing you could do is this:

<a href="#<%= Model.elementID%>" class="delete"> Delete </a>
$(".delete").live("click", function(event) {
    event.preventDefault();
    var elementID =  $(this).attr("href");
    // strip the preceding '#'

    // rest of your code
});

PS: everything does not have a best practise. Some things just need a new appoach.

Cheers, jrh

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文