javascript - 如何将要附加图像的元素传递给 image.onload() 函数

标签 javascript onload appendchild

我正在编写一个库,它在包装元素内创建多个元素,并将所有这些元素及其函数存储在 JavaScript 对象内。我试图避免使用 ID,因为页面上可能有该对象的多个实例。我有一个功能允许用户更改某些元素,并且我需要帮助弄清楚如何附加图像。

这是函数:

foo.prototype.rebrand = function(line1, line2, imgUrl){
    this.branding.childNodes[1].innerHTML = line1;
    this.branding.childNodes[2].innerHTML = line2;
    var brandImage = document.createElement('img');
    brandImage.onload = function(){
        this.branding.childNodes[0].appendChild(brandImage);
                    //this won't work
    }
    brandImage.src = imgUrl;
}

您可以调用foo.rebrand('hello', 'world', 'example.png')

不幸的是,在 .onload 函数中,this 将引用图像元素本身。那么,如何将 this.branding.childNodes[0] 传递到图像加载中?

如果我像这样编写函数:

            brandImage.onload = function(anything){
        this.branding.childNodes[0].appendChild(brandImage);
                    //this won't work
    }

那么anything将只是对onload事件的引用。

编辑以添加 jsFiddle: http://jsfiddle.net/KtJd6/

最佳答案

您需要更改引用特定元素的方式来检索元素,而不是子节点。这将使它更加坚固。而且,当您这样做时,您也不需要在 onload 处理程序中引用 this

foo.prototype.rebrand = function(line1, line2, imgUrl){
    var brandImage = document.createElement('img');

    // find child divs
    var divs = this.branding.getElementsByTagName("div");
    divs[0].innerHTML = line1;
    divs[1].innerHTML = line2;

    brandImage.onload = function(){
        divs[0].appendChild(brandImage);
    };
    brandImage.src = imgUrl;
};

请注意,我使用 getElementsByTagName() 获取元素,而不是引用直接 childNode 索引。这使得它对文本节点的位置不敏感,并且是引用您想要定位和修改的元素的更可靠的方式。

您可以在这里看到它的工作原理:http://jsfiddle.net/jfriend00/kkXCg/

关于javascript - 如何将要附加图像的元素传递给 image.onload() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9956765/

相关文章:

javascript - 通过多个匹配条件递归过滤无限嵌套对象的数组,但只返回具有两个匹配实例的父对象

javascript - 如何在时钟中获得 "0"到 "1"之前的 "9"

javascript - 在 onload() 之后加载外部 javascript 文件

javascript - 如何使用 jsdoc-toolkit 记录匿名函数(闭包)

javascript - 使用 AngularJS 路由的 ASP.NET 5 路由

javascript - HTML5 音频加载事件?

javascript - 多次加载冲突

javascript - 旧 IE 浏览器中的 appendChild

javascript - 使用纯 JS 创建具有 id 和样式的元素

internet-explorer-7 - 在 IE7 中使用 appendchild 的问题