我有javascript变量obj,它表示DOM中的一个元素,我希望更改其ID。我试图通过以下方式做到这一点,这也说明它不起作用!
obj.id = "newID";
alert(obj.id); // this gives me newID as required
var element = document.getElementById("newID");
if (element != null) { alert("Hooray"); // this alert never gets displayed! }
我上面的代码出了什么问题,这意味着id似乎已被更改但未在DOM中获取?非常感谢提前。
答案 0 :(得分:5)
由于你没有给我们整个代码,我的猜测是你的代码中可能有类似的东西
obj = document.createElement("div");
obj.id = "something";
// ...
obj.id = "newID";
alert(obj.id); // this gives me newID as required
var element = document.getElementById("newID");
if (element != null) { alert("Hooray"); // this alert never gets displayed! }
在这种特殊情况下,document.getElementById("newID")
不会返回任何内容,因为元素未添加到页面中,因此在页面中找不到它。
答案 1 :(得分:3)
没有理由不使用纯JavaScript。这是一个working fiddle,显示它正常工作。您不应该需要jQuery解决方案或任何其他JavaScript方法,id = "foo";
是更改DOM对象ID的最简单方法。
看看我上面的小提琴,试着看看你的代码和我的代码之间有什么区别。
答案 2 :(得分:3)
您展示的代码确实有效;问题可能出在查找并分配obj
的代码中。我的猜测是,这只是一个javascript对象,而不是DOM树的一部分。
答案 3 :(得分:1)
您的代码看起来很好,但如果您在代码中以这种方式发表评论,您可以意识到由于评论,大括号永远不会被关闭。
if (element != null) { alert("Hooray"); // this alert never gets displayed! } <-- this brace
答案 4 :(得分:0)
试试这个:
为我工作
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>test</title>
</head>
<body bgcolor="#ffffff">
<script type="text/javascript">
function ChangeID(elementId, newId) {
var obj = document.getElementById(elementId);
obj.id = newId;
}
function SetContent(elementId, content) {
var obj = document.getElementById(elementId);
obj.innerHTML = content;
}
</script>
<div id="div1"></div>
<a href="#" onclick="ChangeID('div1', 'div6');">ChangeID</a><br />
<a href="#" onclick="SetContent('div6', 'this is the contents');">Set Contents</a>
</body>
</html>
答案 5 :(得分:0)
还有另外一件事要考虑。在DOM准备好之前,您是否尝试这样做?该元素已加载吗?如果您尝试更改树中没有DOM的元素,您将悄然失败。
答案 6 :(得分:-2)
是的,你可以,这是一个jquery的解决方案
$("#xxx").attr("id", "yyy");
或
getElementById("xxx").setAttribute("id", "yyy");