#javascript #dom
#javascript #dom
Вопрос:
Я хотел спросить, как изменить содержимое div, но не используя innerhtml.
Комментарии:
1. Почему бы не использовать innerHTML?
2. Методы манипулирования DOM: quirksmode.org/dom/w3c_core.html#nodemanipulation
3. @GolezTrol Потому что это не стандартно. Это неправильный способ делать что-то с перспективной точки зрения. Он обрабатывает DOM как строку, когда это не так. Он полностью уничтожает любые события, которые были на этих элементах.
4. @Ryan Kinal механизм «innerHTML» стандартизирован с HTML5.
5. По общему признанию, бывают случаи, когда использование
innerHTML
не является работой дьявола. Тем не менее, вы всегда должны спрашивать себя, подходит ли этот инструмент для вашей работы. Было так много раз , когда я был вынужден перейти на манипуляции.innerHTML
с DOM из-за проблем с событиями и постоянно растущей детализацией изменений. Просто более расширяемо использовать методы DOM.
Ответ №1:
ДЕМОНСТРАЦИЯ: http://jsfiddle.net/Cb6ME/
// get the div
var div = document.getElementById('foo');
// remove child nodes while at least one exists
while( div.childNodes[0] ) {
div.removeChild( div.childNodes[0] );
}
// create a new span element
var span = document.createElement( 'span' );
// give it some text content
span.appendChild( document.createTextNode("I'm new!!!") );
// append the span to the original div
div.appendChild( span );
Комментарии:
1. Похоже
<span>
, что элемент здесь полностью избыточен. Вы могли бы просто добавить текстовый узелdiv
.2. @duri: Я думаю, речь идет о демонстрации того, как работает манипуляция DOM.
3. @duri: Да, я показывал, как создать новый элемент… Как сказал Феликс. 😉
Ответ №2:
Вы можете использовать nodeValue
для доступа к значению узла, однако значение a div
. В вашем примере у вас может быть следующий HTML…
<div id="myLovelyDiv">This is the text that you want to change</div>
и этот скрипт…
var myDiv = getElementById("myLovelyDiv");
myDiv.childNodes[0].nodeValue = "The text has been changed.";
но я не понимаю, почему вы не будете использовать
myDiv.innerHTML = "The text has been changed properly.";
Комментарии:
1. Я не голосую против, потому что у вас только 1 представитель, но если бы у вас было больше, я бы так и сделал. Нам (сообществу JavaScript) необходимо прекратить использование innerHTML.
2. @Incognito Почему?
innerHTML
часто быстрее, чем использование атрибутов и методов ядра DOM. Он также хорошо поддерживается и с HTML5 больше не является собственностью.3. @duri быстрее? … Ты … ты меня троллишь?
4. @Incognito quirksmode.org/dom/innerhtml.html Тест несколько устарел, но разрешение Наиболее очевидным выводом из этих тестов является то, что innerHTML работает быстрее, чем «настоящие» методы W3C DOM во всех браузерах. все еще действует.
5. @duri эти тесты слишком старые, любой разумный современный браузер быстрее работает с методами DOM, чем с innerHTML. Кроме того, браузеры оптимизируют то, что мы используем, поэтому, если мы используем DOM, DOM будет быстрее. И помните, что мы не хотим использовать innerHTML по очевидным причинам.
Ответ №3:
Элемент DIV — это общий элемент уровня блока (по умолчанию) в HTML, используемый в качестве структурного контейнера для хранения одного или нескольких блочных или встроенных элементов.
В зависимости от того, что вы хотите изменить, вы можете либо напрямую выбрать соответствующий подузел, перебрать свойство childNodes, чтобы найти нужный подузел, либо полностью переписать содержимое в виде html с использованием innerHTML (что, как вы заявили, вы не хотели делать).
Если вы хотите добавить содержимое, вы можете создать новый элемент и использовать метод appendChild (дочерний) элемента DIV для добавления к его содержимому.
Это то, что вы искали?
Ответ №4:
Я знаю, что опаздываю, но .textContent
могу быть заменен на .innerHTML
(если вы хотите изменить только текст, а не код HTML).