当我使用jquery在回调函数中创建一个元素(例如div)时,它不允许我在回调函数之外操作新创建的元素,我该如何解决这个问题呢?
这是一个例子:
$.get('menu.xml',function(data){
//create a new element with an ID called "#newElement"
})
//I can't select the element outside the callback function so the following code dosen't work:
$('#newElement').css('background','black');
答案 0 :(得分:3)
您可以在外面选择它,但尚未,$.get()
回调需要一些时间才能运行(它必须从服务器获取数据,回调发生以后,当完成时),所以当你这样做时:
$('#newElement').css('background','black');
该元素不存在尚未(因此选择器找不到任何东西......它在之前运行回调创建它),你需要等到回调完成后再继续任何需要它创建的元素的代码。像这样:
$.get('menu.xml',function(data){
//create a new element with an ID called "#newElement"
//kick off stuff that uses "#newElement"
$('#newElement').css('background','black');
});
答案 1 :(得分:1)
$.get('menu.xml',function(data){
//create a new element with an ID called ".newElement"
$('<div/>').val(data).attr('id','newElement').css('background','black').append('#container');
})
尝试修改回调中的元素,也尝试使用类而不是id
答案 2 :(得分:1)
从您显示的代码判断,似乎您试图在它存在之前操纵'#newElement'。原因是'#newElement'是在'$ .get'的回调中创建的。
重要的是要记住javascript中的异步函数不会导致线程等待,这就是回调存在的原因。因此,在执行'$ .get'的回调函数之前,您正试图操纵'#newElement'。
例如,如果您将代码调整为:
$.get('menu.xml',function(data){
//create a new element with an ID called "#newElement"
....
$('#newElement').css('background','black');
})
你会发现它有效。