JavaScript цепочка нескольких ошибок createElement - PullRequest
0 голосов
/ 15 декабря 2018

Обычно я пишу свой код так:

var a = document.createElement('div');
var b = document.createElement('div');
a.appendChild(b);

Это работает.Теперь я попытался сделать его более компактным:

var a,b;
a = b = document.createElement('div');
a.appendChild(b);

Однако, таким образом JS выдает ошибку:

Failed to execute 'appendChild' on 'Node': The new child element contains the parent.

Что здесь происходит?

1 Ответ

0 голосов
/ 15 декабря 2018

Вы предполагаете, что:

  a = b = document.createElement('div');

совпадает с:

 a = document.createElement('div');
 b = document.createElement('div');

Это не так.Это скорее так же, как:

 b = document.createElement('div');
 a = b;

И, следовательно, a и b на самом деле одно и то же.Чтобы скопировать вместо ссылки (если вам действительно нужен oneliner):

  a = (b = document.createElement('div')).cloneNode(false);

или oneliner для нескольких:

  const [a, b, c, d] = Array.from({ length: 4 }, () => document.createElement("div"));
...