#javascript
#javascript
Вопрос:
Когда я нажимаю на элемент p с атрибутом onclick, вызывающим функцию make_child, я ожидаю, что он добавит элемент div при каждом нажатии на него, но, похоже, это всего лишь добавление текстового узла к элементу paragraph, в чем причина этого?
<script type="text/javascript">
function make_child(text, id, type) {
var text = document.createTextNode(text);
var target = document.getElementById(id);
var add = document.createElement(type);
var addtext = add.appendChild(text);
target.appendChild(addtext);
}
</script>
<p id="changeme" onclick="make_child('I have changed', 'changeme', 'div')">Click me to change</p>
Комментарии:
1. Что говорит ваша консоль ошибок? Я почти уверен, что это что-то говорит.
2. Ну, мне была выдана недопустимая синтаксическая ошибка при назначении var text, поэтому я изменил эту переменную на text_a, и теперь у меня нет ошибок, но все равно просто добавляю textnode вместо элемента с текстовым узлом в элементе..
3. ах, извините, я упустил из виду, что
text
это текстовый узел.4. где ваш
changeme
элемент
Ответ №1:
измените последнюю строку на эту
target.appendChild(add);
теперь вы добавляете к правильному элементу
Комментарии:
1. Каким образом в функцию передается переменная add, добавляющая текстовый узел?
2. вы создали его
add
как div и добавили к нему свой текст, теперь найдите свою цель и добавьте к нейadd
div. Я понятия не имел, как ваш код работал раньше3. по-видимому, appendChild() возвращает содержимое того, что было добавлено. я не знал этого раньше.
Ответ №2:
Попробуйте сделать target.appendChild(add)
вместо target.appendChild(addtext)
Редактировать (более подробно): Синтаксис для appendChild
(из MDN) является:
var child = element.appendChild(child);
Где child
находится добавляемый элемент. В этом случае addtext = add.appendChild(text)
установлено значение text
, а не add
. Простое выполнение target.appendChild(add)
должно решить эту проблему.
Это также означает, что переменная addtext
бесполезна; вы можете удалить ее, оставив только
add.appendChild(text)
для этой строки.
Комментарии:
1. Каким образом в функцию передается переменная add, добавляющая текстовый узел?
2. Ваш вопрос не совсем ясен.
add
это ссылка на html-элемент, к которому вы добавляете материал. При вызовеadd.appendChild(text)
самadd
изменяется. Это означает, что когда вы передаете его вtarget.appendChild
, вы передаете недавно измененную версию, которая содержит добавленный узел.3. Но когда созданный textnode добавляется к созданному элементу div?
4.Строка
addtext = add.appendChild(text)
. На самом деле эта строка выполняет две вещи: она устанавливаетaddtext
вtext
и добавляетtext
вadd
. По сути, побочным эффектомadd.appendChild(text)
является то, чтоtext
добавляется кadd
независимо от назначения (addtext = ...
).5. В принципе, да: в конце концов, вы используете объектную модель документа (DOM).