创建 img 元素的最佳 JavaScript 代码是什么

IT技术 javascript dhtml
2021-02-16 00:05:32

我想创建一段简单的 JS 代码,在背景中创建一个图像元素并且不显示任何内容。图像元素将调用一个跟踪 URL(例如 Omniture)并且需要简单而健壮,并且只能在 IE 6 =< 中工作。这是我的代码:

var oImg = document.createElement("img");
oImg.setAttribute('src', 'http://www.testtrackinglink.com');
oImg.setAttribute('alt', 'na');
oImg.setAttribute('height', '1px');
oImg.setAttribute('width', '1px');
document.body.appendChild(oImg);

这是最简单但最强大(无错误)的方法吗?

我不能使用像 jQuery 这样的框架。它需要使用纯 JavaScript。

6个回答
oImg.setAttribute('width', '1px');

px仅适用于 CSS。使用:

oImg.width = '1';

通过 HTML 设置宽度,或:

oImg.style.width = '1px';

通过CSS设置它。

请注意,旧版本的 IE 不会创建正确的图像document.createElement(),而旧版本的 KHTML 不会创建正确的 DOM 节点new Image(),因此如果您想完全向后兼容,请使用以下内容:

// IEWIN boolean previously sniffed through eg. conditional comments

function img_create(src, alt, title) {
    var img = IEWIN ? new Image() : document.createElement('img');
    img.src = src;
    if ( alt != null ) img.alt = alt;
    if ( title != null ) img.title = title;
    return img;
}

还要注意document.body.appendChild脚本是否可能在页面加载过程中执行。您可能会在意外的地方看到图像,或者在 IE 上出现奇怪的 JavaScript 错误。如果您需要能够在加载时(但在<body>元素启动之后)添加它,您可以尝试使用body.insertBefore(body.firstChild).

要在不可见的情况下执行此操作但仍然在所有浏览器中实际加载图像,您可以插入一个绝对定位的页面外<div>作为正文的第一个孩子,并放置任何您不想在那里可见的跟踪/预加载图像.

不是new Image()在所有情况下都能发挥最佳效果吗?
2021-05-12 00:05:32
var img = new Image(1,1); // width, height values are optional params 
img.src = 'http://www.testtrackinglink.com';
var img = document.createElement('img');
img.src = 'my_image.jpg';
document.getElementById('container').appendChild(img);
@AndreiCristianProdanconsole.log在每对线之间使用,这样您就可以确切地知道哪条线正在冻结它。
2021-05-06 00:05:32

jQuery:

$('#container').append('<img src="/path/to/image.jpg"
       width="16" height="16" alt="Test Image" title="Test Image" />');

我发现这更有效,因为您不必担心 HTML 转义任何内容(如果值不是硬编码的,这应该在上面的代码中完成)。它也更容易阅读(从 JS 的角度来看):

$('#container').append($('<img>', { 
    src : "/path/to/image.jpg", 
    width : 16, 
    height : 16, 
    alt : "Test Image", 
    title : "Test Image"
}));
此外,将文本解析为代码毫无意义、效率低下且懒惰。谁读到这个,避免那样做。我的意思是,如果您要将文字<img ... />插入 DOM,那么请使用innerHTML进行操作。我只是不明白这个:/
2021-04-30 00:05:32
他特别要求不要使用 jQuery。
2021-05-17 00:05:32

为了完整起见,我建议也使用 InnerHTML 方式 - 即使我不会称之为最好的方式......

document.getElementById("image-holder").innerHTML = "<img src='image.png' alt='The Image' />";

顺便说一句,innerHTML 并没有那么糟糕

我将这种方法用于 50x50 的图像网格。当我尝试上述附加方法时,我的执行时间从 150 毫秒跳到了 2250 毫秒。所以我认为innerHTML 效率更高。
2021-05-02 00:05:32