使用jQuery更改元素的ID


302

我需要使用jQuery更改元素的ID。

显然这些不起作用:

jQuery(this).prev("li").attr("id")="newid"
jQuery(this).prev("li")="newid"

我发现可以通过以下代码实现它:

jQuery(this).prev("li")show(function() {
    this.id="newid";
});

但这对我来说似乎不对。必须有更好的方法,不是吗?另外,如果没有,我可以使用什么其他方法代替显示/隐藏或其他效果?显然,我不想每次都仅显示/隐藏或影响元素,而只是更改其ID。

(是的,我是jQuery新手。)

编辑
在这种情况下,我不能使用类,我必须使用ID。


5
在JavaScript中,您可以分配给变量(foo = 1),对象的成员(foo.bar = 2foo['bar'] = 2)或数组下标(foo[0] = 3),但可以分配给表达式,例如运算符((x + b) = 5)或函数调用的结果(foo() = 1foo(x).bar(y) = 7)没有任何意义,因此绝对不是jQuery或任何其他JavaScript库中的工作方式。
rakslice

Answers:


520

您的语法不正确,应将值作为第二个参数传递:

jQuery(this).prev("li").attr("id","newId");

4
我认为newId应该用引号引起来
Jay Corbett

5
您是否不需要将元素与DOM分离,并用一个具有新ID的新元素替换它?为了避免破坏DOM ...?
cllpse

15
jQuery会解决这个问题,即roosteronacid。
McPherrinM

15
到达这里仔细检查ID重新分配-现在应该.prop( ... )代替.attr( ... )吗?
卡尔

2
@Carl根据最新的jQuery文档和示例,id仍应使用attr(...)
JoeBrockhaus

71

首选选项的.attr用法.prop如下:

$(this).prev('li').prop('id', 'newId');

.attr检索元素的属性,而.prop检索该属性引用的属性(即您实际上打算修改的内容)


4
.attr已被弃用-这是正确的做法。
PointlessSpike

7
这些信息从何而来?api.jquery.com/attr关于弃用一事无成...
Sergej

它不被弃用。“ 从jQuery 1.6开始,该.prop()方法提供了一种在检索属性的同时显式检索属性值的方法.attr()。”
照明者

@Illuminator我相应地更正了我的答案。谢谢。
杰里米·莫里兹


11

我对这个结构做了类似的事情

$('li').each(function(){
  if(this.id){
    this.id = this.id+"something";
  }
});

7

我不确定您的目标是什么,但是最好使用addClass代替呢?我的意思是,我认为对象ID应该是静态的并且特定于该对象。如果您只是想更改页面上显示的内容或类似内容,我会将这些详细信息放在类中,然后将其添加到对象中,而不是尝试更改其ID。再说一遍,我的意思是不了解您的重点目标。


3
遗留系统的乐趣-那时我了解您的痛苦。Eran的回答肯定是最好的。
蒂姆·奈特

5
如果要通过使用HTML中的隐藏模板来构建DOM,然后使用jquery克隆它们,则实际上设置id是一件有用且值得的事情。
史蒂夫·奈特


2
<script>
       $(document).ready(function () {
           $('select').attr("id", "newId"); //direct descendant of a
       });
</script>

这可以实现所有目的。只需在您的正文结束标记之前添加,不要添加Jquery.min.js


0

Eran的回答很好,但我要补充一下。您需要观察与该对象不是内联的任何交互性(也就是说,如果onclick事件调用一个函数,它仍然会),但是如果该ID附加了一些javascript或jQuery事件处理,则它将基本上被放弃:

$("#myId").on("click", function() {});

如果现在将ID更改为#myID123,那么根据我的经验,上面附加的功能将无法再正常运行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.