如何首先获取ID然后在jQuery中使用它?

时间:2014-12-27 14:38:09

标签: jquery

我正在尝试这样做:

  1. data-status的{​​{1}}属性获取ID,并将其存储为.addlink
  2. 点击post_id将从.mar-post_id
  3. 切换.finished-reading

    我有以下代码,但它不起作用。我能做错什么?

    #statusfor-post_id

    以下是HTML标记。

    jQuery(".addlink").click(function(){
        var post_id = jQuery(this).attr("data-status");
        jQuery(".mar-"+post_id).click(function() {
            jQuery("#statusfor-"+post_id).toggleClass( "finished-reading" );
        });
    });
    

1 个答案:

答案 0 :(得分:1)

我已经从您的代码中创建了一个fiddle来测试它,它可以按照您的预期运行。

但如果你有不同的html结构可能会出现问题,即如果.mar-*嵌套在.addlink内。这种情况下的问题是您每次都会添加新的点击事件,因此如果您点击.mar-*,您将触发.addlink的点击事件,添加新的点击事件监听器,因此切换将触发多次。

如果没有看到完整的页面结构,很难猜测如何解决这个问题,我建议的最好的事情就是看看.one()


问题更新后:

这是一个肮脏的黑客攻击,它只为元素添加一个侦听器:jsfiddle。请注意,_data适用于jQuery 1.8+,在此之前它可用作.datasource)。

我不建议使用此功能,因为_data是私有属性,因此将来可能会中断。

您还可以使用不含useCapture属性的vanilla JS addEventListener

更好的方法:

我想到的一件事是更改元素的结构或在添加点击事件时更改。每次点击某个内容时添加一个事件是一个不好的做法,我建议你在元素添加到页面后立即添加所有点击监听器(在domready / window加载或从ajax调用接收数据时)然后不要之后不会改变事件。