【JavaScript 学习--03】--JS动态的更改tagName

场景:
有一个选择列表,可供选择,但是有时候没有我们想要的item,那么可以做一个add功能。
当点击“+” button进行添加时,select Tag变成input Tag, button “+”变成 “Save”。同时在你输入完成后可以按Enter建和鼠标点击“Save” button进行保存。

下面是我的代码:

<!DOCTYPE html>
<html>
<head>
    <title>add_new_item</title>
    <script src="../lib/lodash.min.js"></script>
    <script type="text/javascript">
        var issue_collections = new Object();   //can be save in DB.
        issue_collections = {
            "status": ['NEW', 'INV', 'CLOSE'],
            "severity": ['A-Critical', 'B-Major', 'C-Minor'],
            "frequency": ['Permanent', 'Occassional'],
            "rootcause": ['SW Bug', 'Compiling Error', 'Environment', 'Feature Sync', 'Sack Alignment']
        };

        function initOptions(key){
            var select = document.getElementById(key);
            issue_collections["status"].forEach(function (d) {
                select.options.add(new Option(d, d));
            });
        }

        // function initOptions(obj) {
        //     _.keys(obj).forEach(function (key) {
        //         var select = document.getElementById(key);
        //         var sltObj = select.childNodes;

        //         if (!sltObj.length) {   //create options only at first time.
        //             obj[key].forEach(function (d) {
        //                 select.options.add(new Option(d, d));

        //                 // //Same as below command to add option Tag
        //                 // var optionContainer = document.createElement("option");
        //                 // var optionNode = document.createTextNode(d);
        //                 // optionContainer.appendChild(optionNode);
        //                 // document.getElementById(key).appendChild(optionContainer)
        //             });
        //         }
        //     });
        // }

        //save data when press keyBoard Enter
        function keyEvent(evt, mySltID, BtnID) {
            var value = document.getElementById(BtnID).value;
            evt = (evt) ? evt : ((window.event) ? window.event : ""); //compatible for IE and FF.
            var key = evt.keyCode ? evt.keyCode : evt.which; //compatible for IE and FF.
            if (value == "Save") {
                if(key == 13){   // when press Enter during input.
                    saveData(mySltID);
                    chgtoPlusBtn(BtnID);
                    return true;
                }else {
                    return false;
                }
             }
        }

        function chgBtn(value, mySltID, BtnID) {
            if (value == 'Save') {
                saveData(mySltID);
                chgtoPlusBtn(BtnID);
            }
            else if (value == "+") {
                addOption(mySltID);
                chgToSaveBtn(BtnID);
            }
        }

        function addOption(mySltID) {
            document.getElementById(mySltID).options.length = 0;    //remove all childNodes
            var mySelect = document.getElementById(mySltID).outerHTML = document.getElementById(mySltID).outerHTML.replace(/select/g, "input");
        }

        function chgToSaveBtn(ID) {
            document.getElementById(ID).value = "Save";
        }

        function chgtoPlusBtn(ID) {
            document.getElementById(ID).value = "+";
        }

        function saveData(mySltID) {
            var slt = document.getElementById(mySltID);
            var newData = slt.value;
            if (newData) {  //input data not blank.
                issue_collections[mySltID].unshift(newData.trim());     // Put new element in the first position.
            }
            document.getElementById(mySltID).outerHTML = document.getElementById(mySltID).outerHTML.replace(/input/g, "select")
            addSelectOpt(issue_collections[mySltID], mySltID);

        }

        function addSelectOpt(obj, mySltID){
            var len = obj.length;
            var select = document.getElementById(mySltID);
            for (var i = 0; i < len; i++) {
                select.options.add(new Option(obj[i], obj[i]));
            }
        }
    </script>

</head>
<body>

    <div class="col-sm-4" >
        <form>
            <select name="select" id="status" onkeypress="keyEvent(event, 'status','Btn_status')" ></select>
            <input id="Btn_status" type="button" value="+" onclick="chgBtn(this.value, 'status', 'Btn_status')" />
        </form>
        <br>
        <input type="button" Value="Initial List" onclick="initOptions('status');" />
    </div>

</body>
</html>

下面是代码呈现的效果:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木瓜~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值