Почему содержимое уничтожается при преобразовании NodeList в массив?

Процесс выглядит следующим образом:

NodeList VariableArray VariableJSON.stringifyJSON.parse

Моя проблема в том, что когда я преобразовываю переменную типа NodeList (в данном случае links) в массив, а затем заглядываю в содержимое после выполнения JSON.stringify, записи уничтожаются.

Код показывает два теста. Тест 1 показывает, что если начать с массива, то JSON правильно кодирует и декодирует массив объектов. Тест 2 показывает, что если начать с NodeList, а затем преобразовать в массив, то JSON уничтожит содержимое массива.

Вопрос. Почему это происходит? Что я могу сделать, чтобы обеспечить сохранение объектов в NodeList/Array.

Н. B.: Я пробовал это с различными методами преобразования NodeList ⟶ Array, .toArray(), используя цикл for для добавления элементов в новый массив и используя команду $.makeArray() jquery. Во всех случаях возникает одна и та же проблема.

function out() {
  var args = Array.prototype.slice.call(arguments, 0);
  document.getElementById('output').innerHTML += '' + args.join('') + '\n';
}


out('--- Test 1: Array -> JSON.stringify -> JSON.parse -> Array ---');

var links = [{
    href: 'rot',
    anzahl: 34
  }, {
    href: 'blau',
    anzahl: 103
  }, {
    href: 'gruen',
    anzahl: 19283
  }, {
    href: 'grau',
    anzahl: 10
  }, {
    href: 'weiss',
    anzahl: 700
  }]
  //links = $.makeArray(links);
  // Already an array. Don't need to convert.
  // But it will still work, if one does.

out('Type: ' + typeof links);
out('Variable before JSON: ' + links);
out('An element of the array: ' + links[2]);
out('An entry: [' + links[2].href + ']');
out('');
links = JSON.stringify(links);
out('Variable after JSON: ' + links);
links = JSON.parse(links);
out('Variable after JSON.parse: ' + links);
out('');
out('An element of the array: ' + links[2]);
out('An entry: [' + links[2].href + ']');


out('');

out('--- Test 2: NodeList -> Array -> JSON.stringify -> JSON.parse -> Array ---');
var myNodeList = document.querySelectorAll('a');
out('Type before conversion: ' + typeof links);
// Conversion-Method 1. 
/* links = [];
   	for(var k=0; k<ergebnis.links.length; k++) {
    	links.push(myNodeList[k]);
    }*/
// Conversion-Method 2.
links = $.makeArray(myNodeList);
// Conversion-Methods 1+2 lead to same results.

out('Type: ' + typeof links);
out('Variable before JSON: ' + links);
out('An element of the array: ' + links[2]);
out('An entry: [' + links[2].href + ']');
out('');
links = JSON.stringify(links);
out('Variable after JSON: ' + links);
links = JSON.parse(links);
out('Variable after JSON.parse: ' + links);
out('');
out('An element of the array: ' + links[2]);
out('An entry: [' + links[2].href + ']');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<div>List of Websites in HTML
  <p>
    <a href="http://www.google.com"> Google</a> 
    <br>
    <a href="http://www.wikipedia.com"> Wikipedia </a>
    <br>
    <a href="http://www.yahoo.com"> Yahoo! </a>
    <br>
    <a href="http://www.lbc.co.uk"> LBC </a>
    <br>
  </p>
</div>



<pre id='output'></pre>


person Samot    schedule 06.01.2017    source источник
comment
Вы должны провести еще немного времени с jsFiddle. Вам не нужно копировать исходный код библиотеки в свои скрипты. Вам не показалось странным, что вам, похоже, нужно из кожи вон лезть, чтобы заставить этот зрелый инструмент разработчика работать?   -  person Tomalak    schedule 06.01.2017
comment
Вы не можете сериализовать элементы DOM с помощью JSON.stringify.   -  person Sebastian Simon    schedule 06.01.2017
comment
@Томалак. Какова ваша точка зрения? Есть ли у вас конструктивные комментарии?   -  person Samot    schedule 06.01.2017
comment
@Xufox: хорошо, а как тогда следует это сделать?   -  person Samot    schedule 06.01.2017
comment
@Samot - это было довольно конструктивно. В любом случае, исправил это для вас, так что jsFiddle не нужен   -  person mplungjan    schedule 06.01.2017
comment
Я к тому, что вы неправильно используете свои инструменты и, видимо, не замечаете и не беспокоитесь. Уберите агрессивный тон, вы не имеете права быть агрессивным.   -  person Tomalak    schedule 06.01.2017
comment
Что вы предлагаете?   -  person Samot    schedule 06.01.2017
comment
Найдите сериализуемый dom stackoverflow.com/questions/2303713/ - stackoverflow.com/questions/8914985/   -  person mplungjan    schedule 06.01.2017
comment
@mplungjan спасибо за обновление вопроса. Или вы имеете в виду, что у вас есть решение проблемы?   -  person Samot    schedule 06.01.2017
comment
Я сделал фрагмент, чтобы посетителям не нужно было никуда идти, чтобы увидеть код. Также я нашел вам возможные дубликаты.   -  person mplungjan    schedule 06.01.2017
comment
Спасибо, +mplungjan, очень конструктивно. Две ссылки сейчас читаю.   -  person Samot    schedule 06.01.2017
comment
@mplungjan: спасибо за ссылки. Я попытался реализовать некоторые методы там, но они были для другого типа проблемы и в конечном итоге не увенчались успехом. Похоже, что нет команды для сериализации NodeList, и выходные данные функции printObj() (см. ответ в ссылке), похоже, теряют информацию и просто не могут быть расшифрованы через e. g. JSON.parse или другие методы. Обязательно должен быть простой метод преобразования из NodeList в строку/JSON.   -  person Samot    schedule 06.01.2017