Каков наиболее эффективный способ создания элементов HTML с использованием jQuery?

В современных браузерах и HTML5 в окне history есть метод под названием pushState. Это изменит URL-адрес и перенесет его в историю без загрузки страницы.

Вы можете использовать его следующим образом: он будет принимать 3 параметра: 1) объект состояния 2) название и URL-адрес):

window.history.pushState({page: "another"}, "another page", "example.html");

Это изменит URL-адрес, но не перезагрузит страницу, также не будет проверять, существует ли страница, поэтому, если вы используете какой-либо код javascript, который будет реагировать на URL-адрес, вы можете работать с ними следующим образом .

Также есть history.replaceState(), который делает точно то же самое, за исключением того, что он изменит текущую историю вместо создания нового!

Также вы можете создать функцию для проверки если существует history.pushState, а затем продолжайте с остальными:

function goTo(page, title, url) {
  if ("undefined" !== typeof history.pushState) {
    history.pushState({page: page}, title, url);
  } else {
    window.location.assign(url);   
  }
}

goTo("another page", "example", 'example.html');

Также вы можете изменить # для <HTML5 browsers, который не перезагрузит страницу, вот как Angular использовать SPA в соответствии с hashtag ...

Изменить # довольно легко, делая:

window.location.hash = "example";

, и вы можете обнаружить его следующим образом:

window.onhashchange = function () {
  console.log("#changed", window.location.hash);
}
417
задан Community 23 May 2017 в 12:10
поделиться

7 ответов

Я использую $(document.createElement('div')); шоу Сравнительного тестирования , эта техника является самой быстрой. Я размышляю, что это вызвано тем, что jQuery не должен идентифицировать его как элемент и создать сам элемент.

необходимо действительно выполнить сравнительные тесты с различными механизмами JavaScript и взвесить аудиторию с результатами. Примите решение оттуда.

304
ответ дан strager 23 May 2017 в 12:10
поделиться

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

20
ответ дан Collin Allen 23 May 2017 в 12:10
поделиться

Я думаю, что Вы используете лучший метод, хотя Вы могли оптимизировать его к:

 $("<div/>");
16
ответ дан tvanfosson 23 May 2017 в 12:10
поделиться

лично я предложил бы (для удобочитаемости):

$('<div>');

некоторые числа на предложениях до сих пор (сафари 3.2.1 / Mac OS X):

var it = 50000;

var start = new Date().getTime();
for (i = 0; i < it; ++i)  {
  // test creation of an element 
  // see below statements
}
var end = new Date().getTime();
alert( end - start );                

var e = $( document.createElement('div') );  // ~300ms
var e = $('<div>');                          // ~3100ms
var e = $('<div></div>');                    // ~3200ms
var e = $('<div/>');                         // ~3500ms              
163
ответ дан Owen 23 May 2017 в 12:10
поделиться

Вам не нужна необработанная производительность от операции, которую Вы будете выполнять чрезвычайно нечасто с точки зрения ЦП.

11
ответ дан yfeldblum 23 May 2017 в 12:10
поделиться

Это неправильный ответ на вопрос, но все же я хотел бы поделиться этим .. .

Использование только document.createElement ('div') и пропуск JQuery значительно улучшит производительность, когда вы хотите создавать множество элементов на лету и добавлять их в DOM.

20
ответ дан 22 November 2019 в 23:24
поделиться

На самом деле, если вы выполняете $ ('

') , jQuery также будет использовать document.createElement () .

(Взгляните на строку 117 ).

Есть некоторые накладные расходы на вызов функций, но если производительность не критична (вы создаете сотни [тысячи] элементов), нет особых причин возвращаться к простой DOM .

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

37
ответ дан 22 November 2019 в 23:24
поделиться
Другие вопросы по тегам:

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