在javascript </div>中创建和删除<div>元素

时间:2011-05-27 12:17:26

标签: javascript javascript-events dom-manipulation

function labelOnClick () {
    function makeDivId(id) {
        return id + "_div";
    };

    var div = this.getElementById(makeDivId(this.id));

    if (div) {
        div.parentNode.removeChild(div);
    } else {
        div = document.createElement("div");
        div.innerHTML = "welcome";
        div.id = makeDivId(this.id);

        this.appendChild(div);
    }
}




<label id="1" onclick="labelOnClick()" > BROWSER </label>
<label id="2" onclick="labelOnClick()"> GAMING CONSOLE </label>

在上面的示例中,我尝试在单击标签时创建div元素,并在再次单击标签时删除创建的div元素,但它不起作用。

3 个答案:

答案 0 :(得分:4)

您的代码中有几个问题:

  • 在事件处理函数label onclick="..."内部分配事件处理程序内联(this)时,将指向全局对象(window)。您可以将this作为参数传递给函数。

  • 如果没有找到任何元素,某些浏览器会在将getElementById()的结果分配给变量时失败(如果我错了,有人会纠正我)。

这样的事情会起作用:

<script>
function labelOnClick (me) {
    var makeDivId=function (id) {
        return id + "_div";
    };
    var div;

    if (document.getElementById(makeDivId(me.id))) {
        div=document.getElementById(makeDivId(me.id));
        div.parentNode.removeChild(div);
    } else {
        div = document.createElement("div");
        div.innerHTML = "welcome";
        div.id = makeDivId(me.id);

        me.appendChild(div);
    }
}
</script>

<label id="1" onclick="labelOnClick(this)" > BROWSER </label>
<label id="2" onclick="labelOnClick(this)"> GAMING CONSOLE </label>

jsFiddle Demo

答案 1 :(得分:1)

我的建议是不使用javascript添加div,而是在点击时更改div标签的可见性样式属性。

function labelOnClick () {
    function makeDivId(id) {
        return id + "_div";
    };

    //var div = this.getElementById(makeDivId(this.id));

    if (document.getElementById("divID").style.visibility == "visible") {
        document.getElementById("divID").style.visibility = "hidden";          
    } else {
        document.getElementById("divID").style.visibility = "hidden";  
    }
}

    <label id="1" onclick="labelOnClick()" > BROWSER </label>
    <label id="2" onclick="labelOnClick()"> GAMING CONSOLE </label> 

答案 2 :(得分:1)

您正在尝试使用“this”关键字代替“document”,这不起作用,因为“this”指向labelOnClick函数。

function labelOnClick(e)
{
    function makeDivId(id)
    {
        return id + "_div";
    };

    var div = document.getElementById(makeDivId(this.id));

    if (div)
    {
        div.parentNode.removeChild(div);
    }
    else
    {
        div = document.createElement("div");
        div.innerHTML = "welcome";
        div.id = makeDivId(this.id);

        var element = e.target;
        element.parentNode.insertBefore(div, element.nextSibling);
    }
}


<label id="1" onclick="labelOnClick(event)" > BROWSER </label>
<label id="2" onclick="labelOnClick(event)"> GAMING CONSOLE </label>

我写这个假设你使用的东西支持事件对象的“target”属性(例如不是Internet Explorer)。如果您需要跨浏览器支持,可以手动执行或使用jQuery或Prototype等框架。

编写原始代码的方式,我假设你想要每个标签一个div,我猜测定位(紧跟标签后)。

相关问题