Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将元素添加到文档中时发生的事件_Javascript - Fatal编程技术网

Javascript 将元素添加到文档中时发生的事件

Javascript 将元素添加到文档中时发生的事件,javascript,Javascript,将新html字符串添加到页面中: document.getElementById('container').innerHTML = '<div id="child"></div>'; 但它似乎不起作用 更新: 或许,我应该提供更多有关情况的细节。我有一个图书馆功能 myLibrary.getHtml() 在旧版本中,用户只需调用此函数并将结果追加到文档中: document.getElementById('container').innerHTML = myLibra

将新html字符串添加到页面中:

document.getElementById('container').innerHTML = '<div id="child"></div>';
但它似乎不起作用

更新: 或许,我应该提供更多有关情况的细节。我有一个图书馆功能

myLibrary.getHtml()
在旧版本中,用户只需调用此函数并将结果追加到文档中:

document.getElementById('container').innerHTML = myLibrary.getHtml();

在新版本中,结果不是简单的html。现在,用户可以在将其附加到文档中后与之交互。因此,在他们将html附加到文档中之后,我需要遍历结果DOM并附加事件处理程序,隐藏一些元素和其他内容。这就是为什么,我需要知道他们何时将其添加到文档中并执行javascript函数,该函数将普通html转换为奇特的交互式小部件。

如果我没有误解这个问题,您可能可以实现这一点

document.getElementById('id').childNodes;

如果我没有误解这个问题,你也许可以让它起作用

document.getElementById('id').childNodes;

您可以尝试使用,但它们在不同浏览器中的实现仍不一致。

您可以尝试使用,但它们在不同浏览器中的实现仍不一致。

如果您可以使用jQuery,您可以编写自己的自定义事件,该事件将在添加新html时调用您需要调用的函数:

$('#container').bind('changeHtml', function(e) {
  // Execute the function you need
});
当然,不只是将html添加到元素中,您需要将其封装在一个触发自定义事件的函数中。然后您需要做的就是调用这个函数,而不是自己设置innerHtml

function addHtml(html) {
  $('#container').innerHTML = html;
  $('#container').trigger('changeHtml');
}

如果可以使用jQuery,则可以编写自己的自定义事件,该事件将在添加新html时调用需要调用的函数:

$('#container').bind('changeHtml', function(e) {
  // Execute the function you need
});
当然,不只是将html添加到元素中,您需要将其封装在一个触发自定义事件的函数中。然后您需要做的就是调用这个函数,而不是自己设置innerHtml

function addHtml(html) {
  $('#container').innerHTML = html;
  $('#container').trigger('changeHtml');
}

我自己这样解决:

myLibrary.getHtml = function() {
    var html;
    ...
    var funcName = 'initWidget' + ((Math.random() * 100000) | 0);
    var self = this;
    window[funcName] = function() { self._initWidget(); };
    return html + '<img src="fake-proto://img" onerror="' + funcName + '()"';
}
myLibrary.getHtml=function(){
var-html;
...
var funcName='initWidget'+((Math.random()*100000)0);
var self=这个;
窗口[funcName]=函数(){self.\u initWidget();};
返回html+'

代码背后的想法是,我为
img
标记的
src
属性指定了不正确的url,图像触发错误事件并调用我的函数。非常简单:)

由我自己这样解决:

myLibrary.getHtml = function() {
    var html;
    ...
    var funcName = 'initWidget' + ((Math.random() * 100000) | 0);
    var self = this;
    window[funcName] = function() { self._initWidget(); };
    return html + '<img src="fake-proto://img" onerror="' + funcName + '()"';
}
myLibrary.getHtml=function(){
var-html;
...
var funcName='initWidget'+((Math.random()*100000)0);
var self=这个;
窗口[funcName]=函数(){self.\u initWidget();};
返回html+'

代码背后的想法是,我为
img
标记的
src
属性指定了不正确的url,图像触发错误事件并调用我的函数。非常简单:)

设置innerHTML后,你不能自己立即调用函数吗?不,代码是一个库,用户调用库函数并追加通过innerHTML属性生成结果。我无法更改用户与库交互的方式。设置innerHTML后,您是否可以立即自己调用函数?不,代码是库,用户通过innerHTML属性调用库函数并追加结果。我无法更改用户与库交互的方式。哦-抱歉,请阅读你的评论…如果你不能改变人们附加html的方式,那么这显然不起作用…哦-对不起,请阅读你的评论…如果你不能改变人们附加html的方式,那么这显然不起作用。。。