用于动态添加的div元素的Html div on load事件

时间:2011-02-17 08:43:06

标签: javascript html

我怎么能做出这样的事情?

<div id='myDiv' onload='fnName()'></div>

无法使用

window.onload = function () {
    fnName();
};

or

$(document).ready(function () {fnName();});

div元素是动态的。 div内容由xml xsl生成。

有什么想法吗?

9 个答案:

答案 0 :(得分:9)

onload属性可能不会在<div>上触发,如果你动态注入它(因为文档可能已经加载了,但它可能仍然可以工作......?) 。但是你可以通过简单地做这样的事情来轮询元素(类似于YUI的onContentAvailable):

// when the document has loaded, start polling
window.onload = function () {
    (function () {
        var a = document.getElementById('myDiv');
        if (a) {
            // do something with a, you found the div
        }
        else {
            setTimeout(arguments.callee, 50); // call myself again in 50 msecs
        }
    }());
};

或者你可以改变标记(我对XSL一无所知)是这样的:

页面早些时候:

<script type="text/javascript">
    function myDivInserted() {
        // you're probably safe to use document.getElementById('myDiv') now
    }
</script>

使用XSL生成的标记:

<div id="myDiv"></div>
<script type="text/javascript">
    myDivInserted();
</script>

它有点hacky但它​​应该有用。

答案 1 :(得分:7)

您可以使用DOM Mutation Observers

每次dom更改时它都会通知您,例如将新div插入目标div或页面时。

我正在复制/粘贴exmple代码

// select the target node
var target = document.querySelector('#some-id');

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

// configuration of the observer:
var config = { attributes: true, childList: true, characterData: true }

// pass in the target node, as well as the observer options
observer.observe(target, config);

// later, you can stop observing
observer.disconnect();

答案 2 :(得分:5)

如果你还没有使用jQuery,没有理由为此开始使用它,你可以写:

window.onload = function () {
    fnName();
};

答案 3 :(得分:4)

你可以使用jQuery。以下代码将放在您的<head>代码中。

$(document).ready(function() {
    // Your fnNamt function here
});

修改

Kobi提出了一个很好的观点

  

你也可以写   $(文件)。就绪(函数(){fnNamt();});,   或者更简单地说,   $(document).ready(fnNamt);,甚至   $(fnNamt)

答案 4 :(得分:3)

没有jQuery和普通的JS,例如:

<script type="text/javascript">
function bodyOnLoad() {
  var div = document.getElementById('myDiv');
  // something with myDiv
  ...
}
</script>

<body onload="bodyOnLoad()">
....
<div id='myDiv'></div>
....
</body>

答案 5 :(得分:2)

如何使用jQuery / ready(..)呢?

像这里:http://api.jquery.com/ready#fn

在您的问题中,

$(document).ready(function () {fnNamt();});

答案 6 :(得分:1)

我建议你使用jQuery 步骤:
1.从这里下载Jquery库http://code.jquery.com/jquery-1.5.min.js 2.在您的HTML中,head部分创建一个脚本标记并使用下面的代码。

$(document).ready(function(){
//在这里写你的代码..
});

答案 7 :(得分:1)

我有同样的问题,经过搜索我发现了这个。

在我的情况下,javascript附加索引html的头部来加载选项卡内容html文件,onload我想将该选项卡添加到dom,显示它并制作其他js东西以更改选项卡样式。< / p>

我添加了.onload = function(event) {...}

var link = document.createElement('link');
link.rel = 'import';
link.href = 'doc.html'
link.onload = function(event) {...};
link.onerror = function(event) {...};
document.head.appendChild(link);

这就像一个魅力,也许它可以帮助其他研究人员:)

我在HTML5 Imports: Embedding an HTML File Inside Another HTML File

上找到了它

答案 8 :(得分:0)

我建议使用cicle-style func:

SwitchFUnc = false;

function FuncName(div_id) {
    var doc = window!=nil ? window.document : document;
    var DivExists = doc.getElementById(div_id);

    if (DivExists) {
        //something...
        SwitchFunc = true;  //stop the cicle
    }
}

while (SwitchFunc!=true) {
    FuncName('DivId');
}