通过替换节点来更改节点ID

时间:2009-08-13 16:37:56

标签: javascript dom replace

我试图通过获取一个获取当前页面名称的脚本(通过$ _SERVER [“PHP_SELF”])来浏览导航菜单,然后在JavaScript中找到相关名称(即从/contact.php找到联系人) )并搜索具有该id的元素(我的列表项具有与其目标匹配的ID)。现在我想将元素的id换成“cur”,这会赋予它相关的样式,使当前页面的标签显示不同。但是我遇到了问题,尽管使用适当的语法tryin replaceNode和replaceChild。这是一个longwinded形式的脚本:

    function setCurPage() {

  var CurPage = "<?php echo $_SERVER["PHP_SELF"]; ?>"; // equates to "/contact.php"
  var CurRaw = CurPage.substr(1);
  var Cur = CurRaw.split(".")[0];
  var oldNode = document.getElementById(Cur);

var newNode = document.createElement("li");
newNode.id = "cur";
var innards = document.getElementById(Cur).children;
while(innards.length > 0) {
newNode.insertBefore(innards[0]);
}
oldNode.parentNode.replaceChild(newNode, oldNode);
}

我尝试了各种警报,我知道节点创建行是正确的,但任何警报都会在replaceChild行之后中断。有人有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您想要使用以下内容:

var newNode = oldNode.cloneNode(true);
newNode.id = "cur";
oldNode.parentNode.replaceChild(newNode, oldNode);

答案 1 :(得分:0)

oldNode.id = "cur";

应该做你需要的一切。如果你想严格要求,你可以使用

oldNode.setAttribute("id", "cur");

答案 2 :(得分:0)

Okie dokies,我明白了:而不是insertBefore,我现在有了appendChild而且有效。无论如何,为了更好地使用DOM,我会玩你的建议。