chibineku Posted August 13, 2009 Share Posted August 13, 2009 I am trying to create a simple script that will find an element with a certain id, and swap it for a different id. Doing so directly doesn't work, so I am trying to replicate the node with that id and swap it for a node with the same content and my new id. I have no problem with the new node creation, but the replaceNode method doesn't seem to be having the desired effect.The whole idea is to have PHP tell me the name of the current page, and each of my nav menu links (style liked tabs) has an id matching the name of the page. I use JavaScript to extract just the bit of $_SERVER["PHP_SELF"] that I need and use that as the id of the element.Here is the script (once PHP has been evaluated): function setCurPage() {var CurPage = "/contact.php"; var CurRaw = CurPage.substr(1);var Cur = CurRaw.split(".")[0];var newNode = document.createElement("li");newNode.id = "cur";var innards = document.getElementById(Cur).children;while(innards.length > 0) {newNode.insertBefore(innards[0]);}var oldNode = document.getElementById(Cur).replaceNode(newNode);} The element in question is a list item with a link.Any ideas why replaceNode isn't working? Link to comment Share on other sites More sharing options...
boen_robot Posted August 13, 2009 Share Posted August 13, 2009 I'm not exactly aware of a replaceNode() method. I do know of replaceChild() though.You can use it like: var oldNode = document.getElementById(Cur);oldNode.parentNode.replaceChild(newNode, oldNode); Link to comment Share on other sites More sharing options...
chibineku Posted August 13, 2009 Author Share Posted August 13, 2009 I'm not exactly aware of a replaceNode() method. I do know of replaceChild() though.You can use it like:var oldNode = document.getElementById(Cur);oldNode.parentNode.replaceChild(newNode, oldNode); Hm, odd...my JavaScript Bible has replaceNode and I'm using it verbatim. I tried your way too, and it isn't working either - the alert that I put in after the swap to display the new element's outerHTML also stopped working. Gotta go out, will be back in 30 mins to try more. Link to comment Share on other sites More sharing options...
boen_robot Posted August 13, 2009 Share Posted August 13, 2009 Just to make certain - your alert is something like: alert(document.getElementById("cur").outerHTML); and you are testing in IE, right? Link to comment Share on other sites More sharing options...
chibineku Posted August 13, 2009 Author Share Posted August 13, 2009 Just to make certain - your alert is something like:alert(document.getElementById("cur").outerHTML); and you are testing in IE, right? I will try again, but that's pretty much what I had...it worked for a while, before I made some other changes. I am testing in FF. Link to comment Share on other sites More sharing options...
chibineku Posted August 13, 2009 Author Share Posted August 13, 2009 My alerts work BEFORE I try the replaceChild method, but not after. Strange.This is the new code, BTW: 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);} edit: i am getting an error in FireFox error console:Error: uncaught exception: [Exception... "Not enough arguments" nsresult: "0x80570001 (NS_ERROR_XPC_NOT_ENOUGH_ARGS)" location: "JS frame :: http://www.sinaesthesia.co.uk/contact.php :: setCurPage :: line 18" data: no]I don't believe that needs more arguments... Link to comment Share on other sites More sharing options...
boen_robot Posted August 13, 2009 Share Posted August 13, 2009 AFAIK, outerHTML is an IE property that's supported in IE... not in Firefox. That's why it may not be working. That's why I asked you if you're testing in IE.As for the error (which I've only noticed now, like you), it occurs because when an element has no child nodes, insertBefore() is invalid. You need to use appendChild() instead at that first point. Link to comment Share on other sites More sharing options...
justsomeguy Posted August 13, 2009 Share Posted August 13, 2009 You can use appendChild only, you don't need to use insertBefore at all. Link to comment Share on other sites More sharing options...
chibineku Posted August 13, 2009 Author Share Posted August 13, 2009 Ah ha! It worketh!Many thanks: truly do you both dom the DOM. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.