将html元素插入到以前动态插入的元素中?
这里是我的第一个问题,我一直在寻找很多研究的小线索,但没有找到任何答案,希望它不是一件愚蠢的事情。我正在处理一个处理XML文件的网站(数据存储在一个数组中,然后显示并完全可编辑)。将html元素插入到以前动态插入的元素中?
直到现在,尽管我发现一些麻烦,一切正常。
我在我的数组上循环获取所有必需的字符串,然后创建jQuery对象(例如我附加到特定的div的$("<input id='xxx' value='yyy' />")
)。
第一次启动时,我有一个空的#insertXml div(写在我的html中)。 一个我的xml文件解析和我的数组准备好了,我动态创建一个#content div附加到我的#insertXml,然后为每个索引我将它的密钥写入#keyInput“div(动态插入,只有一次),然后在#语言1格(静止型动态插入),在#LANG2 DIV 2,等
语言1,LANG2等1个值是变量,所以它是写:
$("<input .../>").appendTo("#"+langN);
,其中每个循环langN变化。
一切正常!!第一次显示:/
麻烦的是,当我使用我的函数创建新的数据。 我首先在模态窗口上工作,通过侦听器函数检索用户值,然后将其传递给另一个将其推入阵列的函数。 我调试它,工作,我的数组正确更新。
然后我想简单地刷新我的页面,所以我尝试,就像我以前为我的整个数据所做的那样,添加一些输入。
它工作正确,然后我的#keyInput div,但不是我的#lang divs!?!?! 不管我怎么尝试(甚至忘记jQuery和使用html document.xxx函数),都没办法。
在调试过程中,我所有的变量都可以,在执行“appendTo”的时候它什么都不做,除了keyInput div。
我试着删除#content div,并重新启动整个displayInit()方法(繁重的操作,但只是看到)和同样的该死的问题:只有#keyInput被正确刷新。
我读到的唯一可能很有趣的事情是,动态创建的元素(通过脚本)没有在DOM中注册,因此无法找到它。 但在这种情况下,我的显示器尝试都不应该工作,所以?
提前,非常感谢您关注我的噩梦。
附:我的html + JS函数。 my DOM
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);
}
}
OMG,我很惭愧。从在了已复制相同ID的模态窗口生成的输入
我的问题就来了...... 我希望这将是一个有点复杂^^
解决了!
寻求调试帮助的问题(“为什么代码不工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身中重现问题所需的_shortest code_。没有明确问题陈述的问题对其他读者无益。请参阅:[如何创建最小,完整和可验证示例。](http://stackoverflow.com/help/mcve) – nbrooks