просматривая узлы - PullRequest
       4

просматривая узлы

1 голос
/ 08 марта 2011

Вот как выглядит html-структура веб-страницы:

<body>
<form>
 <input type='file'/>
</form>

<div id='list'>
 <div>value here<input id='delete' type='button'/></div>
</div>
</body>

Я нашел код JavaScript, который срабатывает при нажатии кнопки «удалить» и удаляет входной элемент «файл».он использует этот фрагмент кода, где элемент является входным «файлом», упомянутым выше:

deleteButton.onclick=function(){this.parentNode.element.parentNode.removeChild(  
this.parentNode.element );}

Я пытаюсь понять логику (правила), стоящие за «this.parentNode.element»?почему бы не получить доступ к элементу напрямую 'element.parentNode.remove ...'

большое спасибо

Ответы [ 3 ]

1 голос
/ 08 марта 2011

я пытаюсь понять логику (правила), стоящие за this.parentNode.element??

Нет свойства element в Node, Element, HTMLElement или HTMLDivElement интерфейсы.Поэтому я предполагаю, что где-то в этом коде вы найдете что-то, что явно добавляет это свойство к экземпляру элемента div, содержащего кнопку.Вы можете сделать это, добавить произвольные свойства к экземплярам элемента.Эти свойства часто называют «расширенными» и должны выполняться очень, очень, очень осторожно.

0 голосов
/ 09 марта 2011

Хорошо, "removeChild" - странный метод, и, скорее всего, он плохо продуман. Это должно выглядеть так:

<div>value here<input id='deleteMe' type='button'/></div>

var node = document.getElementById('deleteMe');
node.remove(); // <--- does not exist, but sure would be nice!!!

Нет, вместо этого мы должны сделать эти махинации:

var node = document.getElementById('deleteMe');
node.parentNode.removeChild(node); // verbose! Convoluted!

Мы должны получить родителя узла, вызвать метод, а затем снова обратиться к узлу. Насколько я помню, это не похоже на другие методы DOM. Хорошая новость в том, что вы можете сделать так, чтобы все происходило в одной строке, как метод jQuery.

Лучше всего начинать сначала или копировать чужой код. Использование «this» означает, что оно было внутри объекта (или класса), ссылаясь на другие методы или свойства в этом объекте. Вы должны придерживаться не объектных переменных и функций на данный момент.

Надеюсь, это поможет.

0 голосов
/ 08 марта 2011

Не ответ на вопрос, просто мнение.Лучше избегать таких конструкций, как

this.parentNode.element.parentNode

Поскольку в случае изменения структуры DOM вам потребуется переписать JS.Поэтому я думаю, что лучше присвоить тегам атрибуты id и использовать следующую конструкцию для получения элемента DOM:

document.getElementById ('element_id')

или если выбудет использовать некоторые js-фреймворки (например, jQuery ), вы можете использовать еще более простую конструкцию для получения элемента DOM

$ ("# ement_id")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...