Создание нового элемента DOM из строки HTML с использованием встроенных методов DOM или Prototype

Я знаю, что это было опубликовано, как год назад, но у меня есть эта проблема, и я столкнулся с этим, и на самом деле я нашел для нее решение. Этот фрагмент кода работает как прелесть!

Идея проста. Это просто помогает вам, пересчитывая длину многобайтовых строк, как указано в @Alix выше.

Несколько модификаций должны соответствовать вашему коду:

/**
 * Mulit-byte Unserialize
 *
 * UTF-8 will screw up a serialized string
 *
 * @access private
 * @param string
 * @return string
 */
function mb_unserialize($string) {
    $string = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $string);
    return unserialize($string);
}

Источник: http : //snippets.dzone.com/posts/show/6592

Протестировано на моей машине, и оно работает как шарм !!

514
задан Just a student 12 January 2018 в 11:49
поделиться

2 ответа

Примечание: актуальнейшие браузеры поддерживают элементы HTML <template>, которые обеспечивают более надежный способ повернуть элементы создания из строк. См. ответ Mark Amery ниже для деталей .

Для более старых браузеров и node/jsdom: (который еще не поддерживает <template> элементы во время записи), используйте следующий метод. Это - то же самое использование библиотек, чтобы сделать для получения элементов DOM от строки HTML ( с некоторой дополнительной работой для IE для работы вокруг ошибок с его реализацией innerHTML):

function createElementFromHTML(htmlString) {
  var div = document.createElement('div');
  div.innerHTML = htmlString.trim();

  // Change this to div.childNodes to support multiple top-level nodes
  return div.firstChild; 
}

Примечание, что в отличие от шаблонов HTML это не будет работа для некоторых элементов, которые не могут по закону быть детьми <div>, такой как <td> с.

, Если бы Вы уже пользуетесь библиотекой, я рекомендовал бы придерживаться утвержденного библиотекой метода создания элементов от строк HTML:

738
ответ дан mikemaccana 12 January 2018 в 21:49
поделиться

С Прототипом можно также сделать:

HTML:

<ul id="mylist"></ul>

JS:

$('mylist').insert('<li>text</li>');
10
ответ дан Pablo Borowicz 12 January 2018 в 21:49
поделиться
Другие вопросы по тегам:

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