Каков лучший код JavaScript для создания элемента img
Я хочу создать простой бит JS код, который создает элемент изображения в фоновом режиме и не отображается ничего. Элемент image будет вызывать 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.
11 ответов:
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
если скрипт может выполняться как страница находится в середине загрузки. Вы можете получить изображение в неожиданном месте или странную ошибку JavaScript в IE. Если вам нужно иметь возможность добавить его во время загрузки (но после<body>
элемент запущен), вы можете попробовать вставить его в начале тела с помощьюbody.insertBefore(body.firstChild)
.чтобы сделать это незаметно, но все еще иметь изображение на самом деле загрузить во всех браузерах, вы можете вставить абсолютно позиционированный-off-the-page
<div>
как первый ребенок тела и положите любое отслеживание / предварительная загрузка изображений, которые вы не хотите видеть там.
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);
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" }));
просто для полноты, я бы предложил использовать InnerHTML путь, а также-хотя я бы не назвал его лучшим способом...
document.getElementById("image-holder").innerHTML = "<img src='image.png' alt='The Image' />";
кстати, innerHTML не так уж и плохо
вы могли бы просто сделать:
var newImage = new Image(); newImage.src = "someImg.jpg"; if(document.images) { document.images.yourImageElementName.src = newImage.src; }
просто :)
просто добавить полный пример 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>
как указывали другие, если вам разрешено использовать фреймворк, такой как jQuery, лучше всего использовать его, поскольку он, скорее всего, сделает это наилучшим образом. Если вам не разрешено использовать фреймворк, то я думаю, что манипулирование DOM-лучший способ сделать это (и, на мой взгляд, правильный способ сделать это).
Это метод, который я следую, чтобы создать цикл тегов img или один тег как ur wish
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>