this.parentNode.parentNode.removeChild正在删除父级

时间:2013-09-28 16:36:28

标签: javascript

在我的代码中,函数displayUserTable将一些名为tUserBlock的div添加到名为centralWindow的主div中。当您单击tUserBlock时,会从名为userTableClickListener的tUserBlock.onclick函数弹出div。我希望能够在您点击它时关闭该弹出窗口,所以我添加了一个名为userPopupClick的onclick函数,其中包含以下代码:

this.parentNode.parentNode.removeChild(this.parentNode);

但是当它被点击时,centralWindow div(主div)与所有内容一起消失。但我只想隐藏弹出式div。我不确定我做错了什么?

这是代码,弹出部分位于底部:

function displayUserTable() {

    var tTop = 15;
    var tUserBlock = [];

    for (var z = 0; z < (UserData.length); z++) {

        tUserBlock[z] = document.createElement('div');
        tUserBlock[z].className = 'usertable_item';
        tUserBlock[z].id = ('userblock' + z);
        tUserBlock[z].style.width = "388px";
        tUserBlock[z].style.height = "35px";
        tUserBlock[z].style.top = tTop + "px";
        tUserBlock[z].style.left = "25px";
        tUserBlock[z].userID = z;

        tUserBlock[z].onclick = userTableClickListener;

        centerWindow.appendChild(tUserBlock[z]);
    }
}

function userTableClickListener() {
    var tID = this.userID;

    var tPopup = document.createElement('div');
    tPopup.className = 'usertable_popup';
    tPopup.id = 'usertable_popup';
    tPopup.onclick = userPopupClick;

    centerWindow.appendChild(tPopup);
}

function userPopupClick() {
    this.parentNode.parentNode.removeChild(this.parentNode);
}

1 个答案:

答案 0 :(得分:3)

看来你可以这样做(假设centerWindow在范围内):

centerWindow.removeChild(document.getElementById('usertable_popup'));

您当前的方法存在的问题是您在DOM层次结构上增加了一个额外的级别。该弹出窗口添加了centerWindow.appendChild(tPopup);,因此您拥有:

centerWindow
    popup

但是当你试图删除它时,你正在做:

  this.parentNode.parentNode.removeChild(this.parentNode)
//  ^       ^          ^                         ^
//  |       |          body?                     centerWindow
//  |       centerWindow
//  popup