Какой лучший способ добавить изображение на страницу с помощью конструктора Image () или document.createElement () [duplicate]

Использовать фрагменты из библиотеки поддержки -

android.support.v4.app.Fragment

, а затем переопределить

void onAttach (Context context) {
  this.context = context;
}

Таким образом, вы можете быть уверены, что контекст всегда будет ненулевым значением.

57
задан Iswanto Arif 5 June 2011 в 09:15
поделиться

6 ответов

Я не нашел никакой подробной ссылки, но на основе комментария в примере MDC - HTMLImageElement , кажется, что Image является частью уровня DOM 0, тогда как document.createElement является частью уровня DOM 2 .

Уровень DOM 0 был изобретен Netscape и предоставил возможность доступа к определенным элементам веб-сайта. В основном все браузеры поддерживают его для обратной совместимости. Но, честно говоря, я не понимаю , почему существует конструктор Image, потому что, насколько я понял, не было никакого способа манипулировать документом с уровнем DOM 0. Возможно, он использовался только для браузера для создания объектов.

Уровень DOM 2 является официальным стандартом, разработанным W3C.

Для получения дополнительной информации о Уровни DOM, посмотрите на quirksmode.org - Уровень 0 DOM и Википедия .


Я где-то читал что Image, Form и Element называются объектами хоста , это правда?

Да.

Если это так, то какие объекты-хосты?

Спецификация ECMAScript мотивирует объекты-хосты таким образом:

ECMAScript объектно-ориентированного языка программирования для выполнения вычислений и манипулирования вычислительными объектами в среде хоста. ECMAScript, как он определен здесь, не предназначен для вычислительной самодостаточности; действительно, в этой спецификации нет положений для ввода внешних данных или вывода вычисленных результатов. Вместо этого ожидается, что вычислительная среда программы ECMAScript предоставит не только объекты и другие объекты, описанные в этой спецификации, но и определенные объекты хоста, специфичные для среды, описание которых и поведение которых выходит за рамки данной спецификации, за исключением того, чтобы указать, что они могут предоставлять определенные свойства, к которым можно получить доступ, и некоторые функции, которые могут быть вызваны из программы ECMAScript.

и

объект объекта-хозяина, предоставленный средой-хозяином, для завершения среды выполнения ECMAScript. ПРИМЕЧАНИЕ. Любой объект, который не является родным, является объектом-хостом.

Таким образом, любой объект, который не определен в спецификации и предоставлен с помощью среды, является хост-объектом . Это, например, в браузере (среди прочих): window, document и console.

48
ответ дан Felix Kling 20 August 2018 в 09:28
поделиться
  • 1
    Хороший ответ! Я хотел спросить, почему document считается объектом хоста ? Разве это не определено в спецификации уровня DOM 1? w3.org/TR/REC-DOM-Level-1/level-one-core.html#i-Document – rickchristie 5 June 2011 в 10:10
  • 2
    @rickchristie: Не путайте спецификацию DOM с спецификацией ECMAScript. document предоставляется браузером в качестве интерфейса для JavaScript для доступа к DOM. Он не является частью спецификации ECMAScript (самого JavaScript). – Felix Kling 5 June 2011 в 10:12
  • 3
    @rickchristie: Добро пожаловать :) – Felix Kling 5 June 2011 в 10:17
  • 4
    DOM0 - это неофициальное имя, присвоенное методам до уровня DOM уровня 1 для манипулирования документом в браузерах. Использование конструктора Image в основном использовалось для «предварительной загрузки», изображения, используемые динамически в пределах страницы в кеш браузера, как правило, для эффектов переключения изображений, таких как опрокидывания. Он был создан в Netscape 3, который предоставил очень ограниченный набор механизмов для динамического документооборота (переключение изображений, манипулирование элементами формы и представление формы и обновление текста строки состояния, как я помню). – Tim Down 5 June 2011 в 12:29
  • 5

Я не знаю, какова техническая разница, но я просто исправил ошибку IE8, изменив ее с new Image() на document.createElement('img') в следующем коде. В IE8 обратный вызов onload никогда не запускался при использовании конструктора Image.

newImage = document.createElement('img');
//newImage = new Image();

newImage.onload = function () {
  callback(this.width, this.height);
};

newImage.src = image.src;
1
ответ дан Danny Tuppeny 20 August 2018 в 09:28
поделиться

Требования:

В моей команде мы создаем угловое приложение. Требование к функции состояло в том, чтобы предварительно загружать изображения при загрузке компонентов, чтобы повторно использовать их, не загружая снова, когда это необходимо в определенном месте в нашем приложении с одной страницей.

1. img = new Image (); путь:

Мы попытались предварительно загрузить изображения в DOM с помощью create new Image(), но когда мы повторно использовали URL-адрес изображения src, браузер всегда перезагружал исходный файл или проверял, изменен ли заголовок ( если включен кеш), что означает, что предварительная загрузка была успешной, но для каждого повторного использования обратный переход к серверу был сделан снова.

2. img = document.createElement ('img') способ:

Когда мы сделали то же самое с document.createElement('img'), источник изображения был не перезагружен , скорее повторно использован из локальной памяти документа и никакой дополнительный запрос не был сделан для URL-адреса img src.

Я действительно не понимаю, почему, но это большая разница, которую мы обнаружили. В случае, если кому-то еще нужно повторно использовать предварительно загруженные изображения, более поздним было бы пойти, чтобы сохранить некоторые полосы пропускания и несколько запросов в оба конца:)

0
ответ дан Duplich 20 August 2018 в 09:28
поделиться

Две строки эквивалентны и оба создают объект HTMLImageElement. Единственное различие заключается в XML-документе со смешанными пространствами имен - new Image() всегда возвращает элемент <img> с пространством имен XHTML, document.createElement('img') не всегда это делает.

7
ответ дан duri 20 August 2018 в 09:28
поделиться

Я лично буду придерживаться createElement, потому что тогда его не особый случай сделать изображение, все делается так же, как и они идентичны. Я также заметил, что jquery использует метод appendChild (node) для всего, и я не уверен в разница между этим и двумя методами в ваших вопросах, но jquery действительно работает с перекрестным браузером

4
ответ дан mcgrailm 20 August 2018 в 09:28
поделиться
1
ответ дан Joe 31 October 2018 в 07:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: