Что это за элемент?

pg.myfunc = function(){
    var i = 1, j = 2;
    this.selected = 1;
    xx.newObject = this.parentElement;

...

Что делает xx.newObject = this.parentElement;?

Ответ 1

То же, что и this.parentNode: он предоставляет node, который содержит this как childNode. this будет pg, предположительно элементом какого-либо типа; this.parentNode будет Элемент, который содержит его, или объект document, если pg является корневым элементом.

parentElement является нестандартным расширением IE. Поскольку IE также поддерживает стандартное свойство parentNode, parentElement никогда не должен использоваться.

В качестве альтернативы, возможно, это просто произвольный объект с свойством, называемым parentElement, и в этом случае это может быть что угодно. Нет никакого реального способа сказать из этого кода, но было бы необычно устанавливать произвольные свойства, такие как myfunc для элемента node.

Ответ 2

Сохраняет ссылку на родительский элемент this. Так, например:

<div id="parent">
  <span id="child">
  </span>
</div>

В этом случае, если this соответствует диапазону child, parentElement будет соответствовать parent div.

Тем не менее, вы всегда должны использовать parentNode вместо parentElement, поскольку parentElement является собственностью и (я считаю) работает только с IE. Согласно MSDN:

Нет общедоступного стандарта, который применяется к этому свойству.

Ответ 3

Невозможно знать без какого-либо контекста. Мы не знаем, что такое xx, и точно не знаем, что это за объект "this". parentElement МОЖЕТ быть свойством для pg, но затем эта функция может быть вызвана по-другому, например, если где-то она назначена как функция onclick:

someElement.onclick = pg.myfunc;

В этом случае это будет свойство некоторого элемента.

Как говорили другие, если "this" является элементом DOM, вы должны использовать parentNode not parentElement, поскольку последний является нестандартным.