使用jQuery从HTML中删除数据属性

时间:2012-09-20 23:17:44

标签: javascript jquery

似乎无法让这个工作......

我有一个隐藏某些链接的页面。当加载DOM时,我正在使用jQuery来切换其中的一些元素。这是通过使用如下数据属性来驱动的:

<div class="d_btn" data-usr='48'>
  <div class="hidden_button">

然后,我有代码:

  $.each($(".d_btn"), function() {
     var btn = $(this).data('usr');
   if ( btn == '48' ){      
     $(this).children('.hidden_button').toggle();
   }

以上都按计划进行。问题是,一旦if语句被评估,我试图从类.d_btn中删除data-usr。我尝试了以下内容并且没有任何效果(即,在加载页面之后,源代码仍显示data-usr属性:

$(this).removeAttr("data-usr");

$(this).removeData("usr");

我已经在这个问题上工作了几个小时而且......没有!非常感谢帮助!

更新

我已经尝试过将数据属性设置为空字符串的好建议,但我仍然没有得到所需的结果。

为了进一步解释,我试图删除该属性的原因是当ajax响应向页面添加另一个项目时,之前添加的项目已经显示或隐藏了该按钮。在AJAX响应时,我在加载DOM后调用相同的函数。

目前,当通过AJAX添加某些内容时,它会切换所有按钮(显示隐藏的按钮,反之亦然。)呃......

我也非常愿意尝试替代我的方法。谢谢!

更新

嗯,灯泡刚刚闪过,只需使用.show()而不是.toggle()

就可以做我想做的事情。

无论如何,我仍然想找到这个问题的答案,因为无论什么时候添加东西,页面都可能会检查数百个项目 - 这看起来非常低效(即使是电脑,哈哈哈。)

4 个答案:

答案 0 :(得分:7)

更改DOM不会影响源。它会影响DOM,您可以使用Inspector / Developer Tools查看它。右键单击=&gt; View Source将为您提供页面的原始来源,而不是JavaScript修改的实际当前来源。

答案 1 :(得分:5)

如果removeAttr不起作用,为什么不将值设置为随机值或空值?

$(this).attr("data-usr" , '');

$(this).prop("data-usr" , '');

答案 2 :(得分:1)

将其设置为空白字符串:

$(this).attr("data-usr", "");

我认为Kolink说的是:检查DOM,而不是源。 (Chrome:Ctrl + Shift + i)。

答案 3 :(得分:1)

正如其他人所说。检查源将仅显示网页的原始未编辑源。您需要做的是使用开发人员工具检查DOM。

我刚刚在jsfiddle here上检查了Chrome检查器中的所有内容,并且该属性肯定会被删除以及数据。