6

我有 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 中获取?提前谢谢了。

4

7 回答 7

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")不会返回任何内容,因为该元素未添加到页面中,因此在页面中找不到它。

于 2010-09-24T13:19:25.180 回答
3

没有理由这不应该使用纯 JavaScript 工作。这是一个显示它工作的工作小提琴。您不需要 jQuery 解决方案或任何其他 JavaScript 方法,id = "foo";这是更改 DOM 对象 ID 的最简单方法。

看看我上面的小提琴,试着看看你的代码和我的有什么区别。

于 2010-09-24T13:18:29.877 回答
3

您显示的代码确实有效;问题可能出在查找和分配的代码中obj。我的猜测是这只是一个 javascript 对象,而不是 DOM 树的一部分。

于 2010-09-24T13:21:43.517 回答
1

您的代码看起来不错,但如果您在代码中以这种方式进行注释,您可以意识到由于注释,大括号永远不会关闭。

if (element != null) { alert("Hooray"); // this alert never gets displayed! } <-- this brace
于 2010-09-24T13:47:29.263 回答
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>
于 2010-09-24T13:24:43.213 回答
0

还有一件事要考虑。您是否尝试在 DOM 准备好之前执行此操作?该元素是否已加载?如果您尝试更改 DOM 在树中没有的元素,您将悄悄地失败。

于 2010-09-24T18:03:10.580 回答
-2

是的,你可以,这是一个使用 jquery 的解决方案

$("#xxx").attr("id", "yyy");

或者

getElementById("xxx").setAttribute("id", "yyy");
于 2010-09-24T13:11:48.503 回答