Мне нужно динамически задать текст внутри элемента DIV. Каков наилучший, безопасный для браузера подход? У меня есть prototypejs и scriptaculous.
<div id="panel">
<div id="field_name">TEXT GOES HERE</div>
</div>
Вот'как будет выглядеть функция:
function showPanel(fieldName) {
var fieldNameElement = document.getElementById('field_name');
//Make replacement here
}
Вы можете просто использовать:
fieldNameElement.innerHTML = "My new text!";
Обновляться для всех читать это в 2013 году и позднее:
Этот ответ имеет много оптимизаторов, но ответы на все вопросы серьезно устарели и зависят от библиотеки, чтобы делать то, что все нынешние браузеры из коробки.
fieldNameElement.textContent = "New text";
в <предварительно><код> showPanel функции(имяполя) { ВАР fieldNameElement = документ.метода getElementById (на"имя_поля" - а); пока(fieldNameElement.childNodes.длина >= 1) { fieldNameElement.метода removechild(fieldNameElement.возвращение null); } fieldNameElement.метода appendChild(fieldNameElement.ownerDocument.createTextNode(имяполя)); } </код></пре>
Преимущества такого способа:
Если бы я собирался использовать библиотеку JavaScript, я'd с помощью jQuery, и сделать это: в <предварительно><код> $(на"див#имя_поля" - а).текст(имяполя); </код></пре>
Обратите внимание, что @AnthonyWJones' комментарий правильно: "в имя_поля" и это'т особенно описательные ID или имя переменной.
Я хотел бы использовать прототип'метод обновления S`, который поддерживает обычный текст, фрагмент HTML или любой JavaScript-объект, который определяет
метод toString` способ.
$("field_name").update("New text");
$('field_name').innerHTML = 'Your text.';
Одна из замечательных особенностей Prototype заключается в том, что $('имя_поля')
делает то же самое, что и document.getElementById('имя_поля')
. Используйте это! :-)
Ответ John Topley', использующего функцию Prototype' update
, является еще одним хорошим решением.
Быстрый ответ заключается в использовании innerHTML будет (или прототипа'метод update, который почти то же самое). Проблема с innerHTML-это необходимо, чтобы избежать содержание назначаются. В зависимости от ваших целей вы должны делать это с другим кодом или
в IE:
document.getElementById("field_name").innerText = newText;
в ФФ:-
document.getElementById("field_name").textContent = newText;
(На самом деле ФФ имеют следующие присутствует в коде)
HTMLElement.prototype.__defineGetter__("innerText", function () { return this.textContent; })
HTMLElement.prototype.__defineSetter__("innerText", function (inputText) { this.textContent = inputText; })
Теперь я могу просто использовать через свойство innerText, если вам нужна широкую поддержку браузера, то это не полное решение, но не через innerHTML, в сырые.
Если вы действительно хотите, чтобы мы просто продолжили с того места, на котором вы остановились, вы можете это сделать:
if (fieldNameElement)
fieldNameElement.innerHTML = 'some HTML';
nodevalue-это также стандартные свойства DOM вы можете использовать:
function showPanel(fieldName) {
var fieldNameElement = document.getElementById(field_name);
if(fieldNameElement.firstChild)
fieldNameElement.firstChild.nodeValue = "New Text";
}
el.innerHTML='';
el.appendChild(document.createTextNode("yo"));
Если вы'вновь склоняется, чтобы начать использовать много Javascript на своем сайте, jQuery делает игры с DOM очень просто.
<а href="http://docs.jquery.com/Manipulation">http://docs.jquery.com/Manipulation
Делает это так же просто, как: $(на" поле-имя#то").текст("в какой-то новый текст.&и");
Использовать через свойство innerText, если вы можете'т предположить структуру
Здесь'ы легко с jQuery так:
var el = $('#yourid .yourclass');
el.html(el.html().replace(/Old Text/ig, "New Text"));
function showPanel(fieldName) {
var fieldNameElement = document.getElementById(field_name);
fieldNameElement.removeChild(fieldNameElement.firstChild);
var newText = document.createTextNode("New Text");
fieldNameElement.appendChild(newText);
}