jQuery update element id
我是jquery的新手,想更新元素的ID。我的方法是:
按ID选择此元素
用新值覆盖此ID。
你能告诉我我的错误在哪里吗?
谢谢!
以下是HTML代码:
1 2 3 4 5 6
| <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
1 2 3 4 5 6 7 8
| <script type="text/javascript" src=" ../stylesheets/jQuery-1.7.2.js">
$(document).ready(function() {
$('#id_aerial_size_dist').attr('id', 'id_a');
}); |
- 适用于我(Win XP/Chrome 18)。
- 这对我(jsfiddle.net/beardtwizle/jqbb2)在铬金丝雀中有效。
- 是否有多个具有相同ID的元素?此外,您还需要对标签的for属性进行相应的更改。
- 我发现这个代码有效…但谢谢你的帮助。
- @nnnnnn谢谢你的观点!
是的,可以更改任何属性。
1
| $('#your_element').attr('id','the_new_id'); |
再说一次,这绝对不是推荐的,也是一个相当糟糕的做法。但是,您可以为相同的功能使用类。
1
| $('.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());但这样可以在"按规则播放"时提供更大的灵活性。
就我个人而言,我觉得jquery没有一个特定的ID setter方法这一事实是非常有意的,因为您不应该到处更改ID。你不上课有什么原因吗?jquery有许多有用的函数和选择器来管理元素相关的函数和选择器,它们可以同时用作唯一标识符和组标识符。
- 你为什么不换一下身份证?即使承认你"不应该",事实是你可以,那么这是如何回答这个问题的呢?
- 我访问Q&A网站已经有一段时间了,我学到的一点是,有时候最好的答案是"你问错了问题"。也就是说,即使他决定继续使用ID,其他人可能不会。StackOverflow应该和Q&A站点一样是一个参考,我的答案可能是以后其他人的最佳答案。
- 我同意"你问错了问题"一般来说是一个有效的答案,在这种情况下,可能会有更好的方法来做任何基本要求是什么。但另一方面,所显示的代码应该可以工作,也就是说,它应该更改ID——这不一定是因为没有显示什么。所以我想我要说的是,一个完整的答案可以解决这个问题(建议一个更好的选择可以得到加分)。
- 像我这样的人?谢谢。值得一提的是,我当然不希望得到完美的答案,也不打算暗示其他的答案。对于我最初的评论的负面影响,我深表歉意。
- 这是一篇旧文章,但我可以想到一个非常合理的理由来改变元素的ID:SaaS测试A/B测试交换侧边栏的左/右,而不需要重新编写许多行CSS,如#left-bar + #main-content + #right-bar。这是正确的,因为默认情况下*-bar的一个ID不呈现,而且它也是正确的,因为ID需要更改。正如您所看到的,这违反了JS最佳实践在常见情况下"假定可以工作"的方式……但它是正确和有效的使用。当然,我可以重新发明轮子,类侧边栏,写新的CSS……但是为什么呢?没必要浪费时间。
- @达乌平-我想这是个观点问题。为了样式惯例而扭曲DOM在我看来是倒退的。您依赖一个未定义的行为来在浏览器之间保持一致。
- 可接受的实例示例是使用模板引擎,在该引擎中有一个模板化的dom元素,在插入/追加元素时将其设置为ID。