john400 john400 - 6 months ago 28
HTML Question

Failed to execute 'removeChild' on 'Node': parameter 1 is not of type 'Node'

I am making a small game using Javascript in which there are two sides.In the left side there are 5 pics and in the right side there are 4 pics.When the user clicks on the missing picture on the left side then the game goes to the next level.I haven't written the full code yet.I have written the following code

<!--smile game-->
<!DOCTYPE html>
<html>
<head>
<title>Matching Game part3</title>
<meta charset = "UTF-8">
<style>
img
{
position: absolute;
}
div
{
position: absolute;
width: 500px;
height: 500px;
}
#rightside
{
left: 500px;
border-left: 1px solid black;
}

</style>

</head>
<body id ="theBody" onload="generateFaces();">
<h1>Matching Game</h1>
<p>Click on the extra smiling face on the left</p>
<div id="leftside"></div>
<div id="rightside"></div>

<script>
var numberOfFaces = 5;
var theLeftSide = document.getElementById("leftside");
var theRightSide = document.getElementById("rightside");
function generateFaces()
{
for(var i =0; i<numberOfFaces; i++)
{
var image = document.createElement("img");
image.src = "http://home.cse.ust.hk/~rossiter/mooc/matching_game/smile.png";
image.style.top = Math.floor(Math.random() * 400) + "px";
image.style.left = Math.floor(Math.random() * 400) + "px";
document.getElementById("leftside").appendChild(image);
}
}

leftsideimages = theLeftSide.cloneNode(true);
leftsideimages.removeChild(leftsideimages.lastChild);
theRightSide.appendChild(leftsideimages);

</script>
</body>
</html>


And I am getting the error


Failed to execute 'removeChild' on 'Node': parameter 1 is not of type 'Node'.


I have gone through the two other posts here on Stack Overflow but cannot understand how to fix my error.In the code I am first clong all the images and then removing the last child and then adding all the images to the right side so that it can be 1 less.So if anyone could help.
Thanks in advance.

Answer

Your script is inline in the body, so it's being run while the body is being created - and anything done by the generateFaces() function definitely won't be accessible by the code after it (the method is created when the script is run during the body load, but is not actually called until after the body is finished loading)

I've rearranged your code somewhat:

<!--smile game-->
<!DOCTYPE html>
<html>
<head>
<title>Matching Game part3</title>
<meta charset = "UTF-8">
<style>
    img
    {
        position: absolute;
    }
    div
    {
        position: absolute;
        width: 500px;
        height: 500px;
    }
    #rightside
    {
        left: 500px;
        border-left: 1px solid black;
    }
</style>
<script>
var numberOfFaces = 5;
function generateFaces()
{
    for(var i =0; i<numberOfFaces; i++)
    {
        var image = document.createElement("img");
        image.src = "http://home.cse.ust.hk/~rossiter/mooc/matching_game/smile.png";
        image.style.top  = Math.floor(Math.random() * 400) + "px";
        image.style.left  = Math.floor(Math.random() * 400) + "px";
        document.getElementById("leftside").appendChild(image);
    }
}

function init() {
    var theLeftSide = document.getElementById("leftside");
    var theRightSide = document.getElementById("rightside");
    generateFaces();
    leftsideimages = theLeftSide.cloneNode(true);
    leftsideimages.removeChild(leftsideimages.lastChild);
    theRightSide.appendChild(leftsideimages);
}
</script>
</head>
<body id ="theBody" onload="init()">
    <h1>Matching Game</h1>
    <p>Click on the extra smiling face on the left</p>
    <div id="leftside"></div>
    <div id="rightside"></div>
</body>
</html>
Comments