#javascript #dom
#javascript #dom
Вопрос:
Я пытаюсь добавить img в placehere
div с помощью JavaScript, однако мне не повезло. Кто-нибудь может помочь мне с моим кодом?
<html>
<script type="text/javascript">
var elem = document.createElement("img");
elem.setAttribute("src", "images/hydrangeas.jpg");
elem.setAttribute("height", "768");
elem.setAttribute("width", "1024");
elem.setAttribute("alt", "Flower");
document.getElementById("placehere").appendChild("elem");
</script>
<body>
<div id="placehere">
</div>
</body>
</html>
Ответ №1:
document.getElementById("placehere").appendChild(elem);
не
document.getElementById("placehere").appendChild("elem");
и используйте приведенное ниже, чтобы установить источник
elem.src = 'images/hydrangeas.jpg';
Комментарии:
1. Хорошо, я взял переменную в кавычки, но я все еще не вижу изображения
2. @AndrewDeForest:
appendChild
ожидает объект, и тогда он должен работать, если путь к вашему изображению не указан неправильно. Проверьте это jsfiddle.net/naveen/S57rs3. Хм, я понятия не имею. Я изменил его на elem.src = «images/hydrangeas.jpg » и я все еще этого не понимаю. Я даже выписал тег <img src=»images/hydrangeas.jpg «> просто чтобы убедиться, что путь был правильным, и он появился.
4. Вы уверены, что скрипт выполняется?
5. Я думаю, что мой скрипт был запущен до завершения загрузки DOM, поэтому я добавил document.addEventListener(«DOMContentLoaded», function() и, похоже, это исправило!
Ответ №2:
Это должно быть:
document.getElementById("placehere").appendChild(elem);
И поместите свой div
перед своим javascript, потому что, если вы этого не сделаете, javascript будет выполняться перед div
exists . Или дождитесь его загрузки. Итак, ваш код выглядит следующим образом:
window.onload = function() {
var elem = document.createElement("img");
elem.setAttribute("src", "http://img.zohostatic.com/discussions/v1/images/defaultPhoto.png");
elem.setAttribute("height", "768");
elem.setAttribute("width", "1024");
elem.setAttribute("alt", "Flower");
document.getElementById("placehere").appendChild(elem);
}
<div id="placehere"></div>
Чтобы доказать мою точку зрения, посмотрите это с загрузкой, а это без загрузки. Запустите консоль, и вы обнаружите ошибку, в которой указано, что метод div
не существует или не может найти appendChild
null
.
Комментарии:
1. Забудьте обо всех вызовах setAttribute , просто задайте свойства напрямую:
elem.src = ...; elem.height = ...; elem.alt = ...;
и так далее.2. Согласен, но, насколько я знаю, использование этого метода не имеет недостатков. Может быть, нам следует настроить тест производительности на JSPerf
3. Тест JSPerf показывает, что setAttribute на самом деле работает быстрее. Неплохо.
4. Разница в производительности незначительна, но для справки, вот тот , который идет другим путем в некоторых браузерах. Более важным является несоответствие setAttribute в разных браузерах по сравнению с согласованностью настройки свойств. В браузерах, совместимых с HTML5, оба делают одно и то же, поэтому неудивительно, что производительность в таких браузерах почти одинакова.
5. Возможно, это быстрее, если вы его не добавляете. Это то, что я вывожу из этого теста. Вы, конечно, правы насчет согласованности.
Ответ №3:
function image()
{
//dynamically add an image and set its attribute
var img=document.createElement("img");
img.src="p1.jpg"
img.id="picture"
var foo = document.getElementById("fooBar");
foo.appendChild(img);
}
<span id="fooBar">amp;nbsp;</span>
Ответ №4:
Следующее решение кажется гораздо более короткой версией для этого:
<div id="imageDiv"></div>
В Javascript:
document.getElementById('imageDiv').innerHTML = '<img width="100" height="100" src="images/hydrangeas.jpg">';
Ответ №5:
На случай, если кому-то интересно, как это сделать с помощью jQuery:
$("<img height='200' width='200' alt='testImage' src='https://avatars.githubusercontent.com/u/47340995?v=4'> </img>").appendTo("#container");