jquery 如何在div准备好后调用函数?

zpjtge22  于 2023-03-22  发布在  jQuery
关注(0)|答案(5)|浏览(150)

我的javascript文件中有以下内容:

var divId = "divIDer";

jQuery(divId).ready(function() {
  createGrid();  //Adds a grid to the html
});

HTML看起来像这样:

<div id="divIDer"><div>

但是有时候我的createGrid()函数在divIder加载到页面之前就被调用了,所以当我试图渲染网格时,它找不到合适的div来指向,也就不会进行渲染。在div完全可以使用之后,我该如何调用函数呢?
编辑:
我正在使用Extjs加载div:

var tpl = new Ext.XTemplate(
'<div id="{divId}"></div>');

tpl.apply({

});
7ajki6be

7ajki6be1#

你可以在这里使用递归来实现。例如:

jQuery(document).ready(checkContainer);

function checkContainer () {
  if ($('#divIDer').is(':visible')) { //if the container is visible on the page
    createGrid(); //Adds a grid to the html
  } else {
    setTimeout(checkContainer, 50); //wait 50 ms, then try again
  }
}

基本上,这个函数将检查以确保元素存在并且可见。如果是,它将运行createGrid()函数。如果不是,它将等待50ms并重试。
注意::理想情况下,您只需使用 AJAX 调用的回调函数来知道容器何时被追加,但这是一种蛮力,独立的方法。

xlpyo6sf

xlpyo6sf2#

到目前为止,“监听”*DOM事件 *(如插入或修改 Elements)的唯一方法是使用所谓的 Mutation Events

document.body.addEventListener('DOMNodeInserted', function( event ) {
    console.log('whoot! a new Element was inserted, see my event object for details!');
}, false);

进一步阅读:MDN

  • Mutation Events* 的问题是,由于不连贯和其他原因,它们从未真正进入任何官方规范。过了一段时间,这些事件在所有现代浏览器中实现,但它们被声明为 deprecated,换句话说,你不想使用它们。
  • Mutation Events* 的官方 * 替换 * 是MutationObserver()对象。

进一步阅读:MDN
目前的语法如下所示

var observer = new MutationObserver(function( mutations ) {
    mutations.forEach(function( mutation ) {
         console.log( mutation.type );
    }); 
});

var config = { childList: true };

observer.observe( document.body, config );

目前,该API已经在Firefox、Chrome和Safari的新版本中实现。我不确定IE和Opera是否会实现。因此,这里的权衡无疑是,您只能针对顶级浏览器。

56lgkhnf

56lgkhnf3#

从函数.load()加载特定div后做一些事情。我认为这正是你需要的:

$('#divIDer').load(document.URL +  ' #divIDer',function() {

       // call here what you want .....

       //example
       $('#mydata').show();
  });
jqjz2hbq

jqjz2hbq4#

通过jQuery.ready函数,你可以指定当DOM加载时执行的函数。整个DOM,而不是你想要的任何div。
所以,你应该用一种稍微不同的方式来使用ready

$.ready(function() {
    createGrid();
});

这是为了防止你不使用 AJAX 来加载div

w41d8nur

w41d8nur5#

<div></div>元素中,您可以调用$(document).ready(function(){});执行命令,类似于

<div id="div1">
    <script>
        $(document).ready(function(){
         //do something
        });
    </script>
</div>

你也可以对其他的div做同样的事情。如果你通过局部视图加载你的div,这是合适的

相关问题