118

我想创建一段简单的 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。

4

11 回答 11

92
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>作为 body 的第一个子项,并在其中放置您不希望显示的任何跟踪/预加载图像.

于 2008-10-22T18:49:56.230 回答
54
var img = new Image(1,1); // width, height values are optional params 
img.src = 'http://www.testtrackinglink.com';
于 2008-10-22T17:58:11.530 回答
24
var img = document.createElement('img');
img.src = 'my_image.jpg';
document.getElementById('container').appendChild(img);
于 2008-10-22T18:08:15.363 回答
10

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"
}));
于 2008-10-22T18:12:30.863 回答
9

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

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

顺便说一句,innerHTML 还不错

于 2008-10-23T15:08:37.473 回答
5

最短路径:

(new Image()).src = "http:/track.me/image.gif";
于 2008-10-23T11:04:49.260 回答
3

你可以使用框架吗?jQueryPrototype使这种事情变得非常容易。这是原型中的示例:

var elem = new Element('img', { 'class': 'foo', src: 'pic.jpg', alt: 'alternate text' });
$(document).insert(elem);
于 2008-10-22T17:53:50.633 回答
3

你可以简单地做:

var newImage = new Image();
newImage.src = "someImg.jpg";

if(document.images)
{
  document.images.yourImageElementName.src = newImage.src;
}

简单的 :)

于 2011-10-15T08:16:58.287 回答
2

只是为了添加完整的 html JS 示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>create image demo</title>
    <script>


        function createImage() {
            var x = document.createElement("IMG");
            x.setAttribute("src", "http://www.iseebug.com/wp-content/uploads/2016/09/c2.png");
            x.setAttribute("height", "200");
            x.setAttribute("width", "400");
            x.setAttribute("alt", "suppp");
            document.getElementById("res").appendChild(x);
        }

    </script>
</head>
<body>
<button onclick="createImage()">ok</button>
<div id="res"></div>

</body>
</html>
于 2016-10-22T12:17:37.430 回答
1

这是我按照您的意愿创建 img 标签或单个标签循环的方法

method1 :
    let pics=document.getElementById("pics-thumbs");
            let divholder=document.createDocumentFragment();
            for(let i=1;i<73;i++)
            {
                let img=document.createElement("img");
                img.class="img-responsive";
                img.src=`images/fun${i}.jpg`;
                divholder.appendChild(img);
            }
            pics.appendChild(divholder);

或者

method2: 
let pics = document.getElementById("pics-thumbs"),
  imgArr = [];
for (let i = 1; i < 73; i++) {

  imgArr.push(`<img class="img-responsive" src="images/fun${i}.jpg">`);
}
pics.innerHTML = imgArr.join('<br>')
<div id="pics-thumbs"></div>
于 2018-04-26T12:18:08.813 回答
0

正如其他人指出的那样,如果您被允许使用像 jQuery 这样的框架,最好的办法就是使用它,因为它很可能会以最好的方式做到这一点。如果您不允许使用框架,那么我认为操作 DOM 是最好的方法(在我看来,这是正确的方法)。

于 2008-10-23T11:14:26.383 回答