【问题标题】:jQuery update element idjQuery 更新元素 id
【发布时间】:2012-04-18 23:07:12
【问题描述】:

我是 jQuery 新手,想更新元素的 id。我的做法是:

  1. 按 id 选择此元素

  2. 用新值覆盖这个 id。

你介意告诉我我的错误在哪里吗?

谢谢!

以下是 HTML 代码:

<tr><th><label for="id_aerial_size_dist">Aerial size dist:</label></th><td><select name="aerial_size_dist" id="id_aerial_size_dist">
<option value="a">Very Fine to Fine</option>
<option value="b">Fine to Medium (EFED Default)</option>
<option value="c">Medium to Coarse</option>
<option value="d">Coarse to Very Coarse</option>
</select></td></tr>

jquery

<script type="text/javascript" src=" ../stylesheets/jQuery-1.7.2.js"></script> 

<script>
$(document).ready(function() {

    $('#id_aerial_size_dist').attr('id', 'id_a');

    });
</script>

【问题讨论】:

  • Works for me (Win XP/Chrome 18)。
  • 这在 Chrome Canary 中为我 (jsfiddle.net/beardtwizzle/jqbb2) 工作
  • 您是否拥有多个具有相同 id 的元素?此外,您需要对标签的for 属性进行相应更改。
  • 我发现此代码有效...但感谢您的帮助。
  • @nnnnnn 谢谢你的意见!

标签: jquery


【解决方案1】:

是的,有一种方法可以更改任何属性。

$('#your_element').attr('id','the_new_id');

再一次,这绝对不推荐,这也是一个非常糟糕的做法。但是,您可以使用类来实现相同的功能。

$('.my_class').removeClass('my_class').addClass('normal_element');

如果你告诉我你需要做什么,我会帮你解决。

【讨论】:

  • 您的 .attr() 示例与 OP 在问题中的示例相同。
  • 那么问题出在其他地方。他正在使用相对路径来包含库本身,因此包含可能会失败。
  • @AlexFl 感谢您提供此添加类解决方案。我可以知道为什么不建议更改 id 名称吗?
  • 默认情况下,id 指定一个元素是唯一的,并且 DOM 是以这种方式创建的。默认情况下,Javascript 使用它。所以基本上你有一个具有唯一 id 的唯一元素。现在您正在尝试删除自己的定义,这是不好的做法。可能不会改变任何最新浏览器和 javascript 库中的任何内容,但理论上你是“超出规则”的,这样说。我很确定它在实践中也有影响,只是现代浏览器真的很聪明(Internet Explorer 不是浏览器,它会尝试但失败)并且“允许”一些错误。
  • 取而代之的是,如果您的元素需要一个唯一的 id,然后是一个 javascript 触发器类,您可以随意删除和添加它。您仍然需要使用 $('.myclass').on("click", function(event){});实现事件委托,而不仅仅是 .click(function(){});但这在“按规则行事”时提供了更大的灵活性。
【解决方案2】:

就我个人而言,我觉得 jQuery 没有针对 Id 的特定 setter 方法是非常有意的,因为您不应该更改 Id。你有什么理由不使用课程吗? jQuery 有很多有用的函数和选择器来管理与元素相关的那些,它们可以用作唯一标识符和组标识符。

【讨论】:

  • 你为什么不应该改变 id 呢?即使接受你“不应该”,事实是你可以,那么这如何回答这个问题?
  • 我访问问答网站已经有一段时间了,我了解到的一件事是,有时最好的答案是“你问错了问题”。也就是说,即使他决心继续使用其他人可能不会使用的 ID。 Stackoverflow 应该像问答网站一样作为参考,我的回答可能是以后其他人的最佳答案。
  • 我同意“你问错问题”通常是一个有效的答案,在这种情况下,无论基本要求是什么,都可能有更好的方法。但另一方面,显示的代码应该可以工作,也就是说,它应该改变 id - 它不能改变的原因一定是由于没有显示的东西。所以我想我要说的是,一个完整的答案会解决这个问题(建议更好的选择会加分)。
  • 像我这样的人?感谢那。对于它的价值,我当然不期望完美的答案,我也不打算暗示其他。对于我最初评论的负面影响,我深表歉意。
  • 这是一篇旧帖子,但我可以想到一个非常正当的理由来更改元素的 ID:SaaS 测试 A/B 测试左右交换侧边栏而不重写许多 CSS 行,例如#left-bar + #main-content + #right-bar。这是正确的,因为 *-bar 的 ID 之一默认不呈现,而且它也是正确的,因为 ID 需要更改。正如您所看到的,这违反了 JS 最佳实践在常见情况下“应该如何工作”的方式......但它是正确且有效的使用。当然我可以重新发明轮子,类侧边栏,编写新的 CSS ......但是为什么呢?没必要浪费时间。
猜你喜欢
  • 2017-02-04
  • 2010-09-25
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
相关资源
最近更新 更多