Javascript jquery回调函数作用域

Javascript jquery回调函数作用域,javascript,jquery,scope,callback,Javascript,Jquery,Scope,Callback,当我使用jquery创建elementa 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 cod

当我使用jquery创建elementa 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'); 
您可以在外部选择它,但现在还不能选择,$.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'); 
});
您可以在外部选择它,但现在还不能选择,$.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'); 
});
尝试修改回调中的元素,同时尝试使用类而不是id


尝试修改回调中的元素,也尝试使用类而不是id从您显示的代码判断,您似乎试图在“newElement”存在之前对其进行操作。原因是“newElement”是在“$.get”的回调中创建的

重要的是要记住javascript中的异步函数不会导致线程等待,这就是回调存在的原因。因此,在执行“$.get”的回调函数之前,您正在尝试操作“newElement”

例如,如果将代码调整为:

$.get('menu.xml',function(data){

    //create a new element with an ID called "#newElement"
    ....

    $('#newElement').css('background','black');
})

你会发现它是有效的。

从你展示的代码判断,你似乎试图在“新元素”存在之前操纵它。原因是“newElement”是在“$.get”的回调中创建的

重要的是要记住javascript中的异步函数不会导致线程等待,这就是回调存在的原因。因此,在执行“$.get”的回调函数之前,您正在尝试操作“newElement”

例如,如果将代码调整为:

$.get('menu.xml',function(data){

    //create a new element with an ID called "#newElement"
    ....

    $('#newElement').css('background','black');
})

你会发现它是有效的。

谢谢你们的回答,你们以清晰、友好的方式回答了问题,我希望有一天我能贡献一点。谢谢你们的回答,你们以清晰、友好的方式回答了问题,我希望有一天我能贡献一点。