将html元素插入先前动态插入的元素中?

时间:2016-07-04 18:41:39

标签: javascript jquery

这是我在这里的第一个问题,我一直在寻找许多研究的小线索,但没有找到任何答案,希望它不是一个愚蠢的事情。

我会尝试直截了当:我正在处理一个处理xml文件的网站(数据存储在一个数组中,然后显示并完全可编辑)。

直到现在,尽管我发现了一些麻烦,但一切正常。

我在我的数组上循环以获取所有必需的字符串然后创建jQuery对象(例如我追加到特定div的$("<input id='xxx' value='yyy' />"))。

刚开始时,我有一个空的#insertXml div(用我的html编写)。 解析了我的一个xml文件并准备好了我的数组,我动态创建了一个附加到我的#insertXml的#content div,然后对于每个索引我将其密钥写在#keyInput&#34; div(动态插入,只有一次),然后是#lang1 div中的第一个值(仍然是动态插入),#lang2 div中的第二个等等。

lang1,lang2等是变量,所以写了:

 $("<input .../>").appendTo("#"+langN); 

其中langN在每个循环上都会发生变化。

一切正常!......在第一场展示:/

问题是,当我使用我的功能创建新数据时。 我首先在模态窗口上工作,通过侦听器函数检索用户值,然后将其传递给另一个将其推送到我的数组中的函数。 我调试了它,这是有效的,我的数组已正确更新。

然后我想简单地刷新我的页面,所以我尝试,就像我之前为我的整个数据所做的那样,添加一些输入。

然后在我的#keyInput div上正确工作,但不在我的#lang divs上工作!?!?! 无论我如何尝试(甚至忘记jQuery和使用html document.xxx函数),都没办法。

在调试时,我的所有变量都没问题,在执行&#34; appendTo&#34;时它什么也没做,除了一次keyInput div。

然后我尝试删除#content div并重新启动整个displayInit()方法(繁重的操作,但只是为了看)和同样该死的问题:只有#keyInput被正确刷新。

我唯一感兴趣的是,动态创建的元素(通过脚本)未在DOM中注册,因此无法找到它。 但在这种情况下,我的显示尝试都不起作用,所以?

事先,非常感谢你关心我的噩梦。

附:我的html + JS函数。my DOM

&#13;
&#13;
function displayInsert() {

    var firstLang = stripXmlExtension(paths[0]); // same keys on every language, so we grab the 1st one
    var lastKeyIndex = mapXml[firstLang].key.length - 1;
    var keyToInsert = mapXml[firstLang].key[lastKeyIndex]; // == last insertion

    var inputKey = "<input size=35 type=text id=k" + lastKeyIndex + " value=" + stripHTML(keyToInsert.replace(/ /g, " ")) + " readonly />";
    // while appending tag to the HTML content page, we add a dblclick listener that will morph the input into a textarea when double dblclicked
    $(inputKey).css("margin-bottom", "15px").dblclick(function (e) {
        e.preventDefault();
        tempEditId = $(this).attr('id');
        $(".modal-body").html("<textarea cols='65' rows='10' id='txt" + $(this).attr('id') + "'>" + $(this).val() + "</textarea>");
        $("#modalEdit #btn-correct").css("display", "none");
        $("#modalEdit").modal({backdrop: "static"});
    }).appendTo("#keyInput");


    for (var i = 0; i < paths.length; i++) {
        var lang = stripXmlExtension(paths[i]);
        var lastValueIndex = mapXml[lang].value.length - 1;
        var valueToInsert = mapXml[lang].value[lastValueIndex]; // == last insertion


        var inputValue = "<input size=35 type=text id=" + lang + "---" + lastValueIndex + " value=" + stripHTML(valueToInsert.replace(/ /g, " ")) + " readonly />";
        // while appending tag to the HTML content page, we add a dblclick listener that will morph the input into a textarea when double clicked
        $(inputValue).css("margin-bottom", "15px").dblclick(function (e) {
            e.preventDefault();
            tempEditId = $(this).attr('id');
            $(".modal-body").html("<textarea cols='65' rows='10' id='txt" + $(this).attr('id') + "'>" + $(this).val() + "</textarea>");
            $("#modalEdit #btn-correct").css("display", "none");
            $("#modalEdit").modal({backdrop: "static"});
        }).appendTo("#" + lang);

    }

}
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

天啊,我很惭愧。

我的问题来自于在模态窗口中生成的输入,该窗口采用了相同的重复ID ... 我希望它会有点复杂^^

解决!