Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Обращение к полю SPAN на форме (https://javascript.ru/forum/misc/1986-obrashhenie-k-polyu-span-na-forme.html)

Period 15.10.2008 21:52

Обращение к полю SPAN на форме
 
Есть форма, примерно такая:


<form method=POST name=img>
    <input type=text name=txt1>
    <input type=submit value=Отправить>
    <span id=test></span>
</form>



Как мне переписать элемент SPAN внутри неё? innerHTML самой формы менять нельзя. document.getElementById тоже не получится использовать.

Нужно что-то типа такого: "document.forms['img'].test.innerHTML = ...", только чтобы работало.

Octane 15.10.2008 22:07

Не совсем понял, что Вы хотите сделать, если просто перезаписать innerHTML тега <span> c идентификатором test, то достаточно написать так:
document.getElementById('test').innerHTML = 'какой-то html-код';

Если Вы хотите заменить весь узел <span id="test" /> на какой-то другой, то тут 2 варианта:
1. Удалить <span> и вставить новый узел:
var form = получаем_ссылку_форму;
form.removeChild(document.getElementById('test'));
var newNode = document.createElement('имя_тега_нового_узла');
form.appendChild(newNode);

2. Заменить <span> на новый узел
var form = получаем_ссылку_форму, newNode = document.createElement('имя_тега_нового_узла'), span = document.getElementById('test');
form.replaceChild(span, newNode);

Period 15.10.2008 22:12

Нет, мне нужно вставлять в конкретный span произвольный html.

document.getElementById('test').innerHTML = 'какой-то html-код';


Такой вариант не подходит из-за того, что на странице много форм с такими спанами. Они создаются динамически и их количество наперёд неизвестно, а мне нужно изменить span в конкретной форме.

Octane 15.10.2008 22:20

Вообще-то идентификатор должен быть уникальным, поэтому нельзя создавать несколько <span> с одинаковым идентификатором на одной странице.

Period 15.10.2008 22:26

А можно создать такой массив?
<span id=test[]></span>


Его нумерация всегда будет соответствовать массиву форм?
<form method=POST name=img[]><span id=test[]></span></form>

Octane 15.10.2008 22:43

Нет, идентификаторы так именовать нельзя.
Заведите, например, себе правило, что <span> в формах будет использоваться только для этих целей и получайте его, например так:
ссылка_на_форму.getElementsByTagName('span')[0].innerHTML = 'какой-то html-код';

Или например для всех таких <span> задайте один и тот же класс и обращайтесь по нему:
<form action="">…<span class="test">…</span>…</form>

ссылка_на_форму.getElementsByClassName('test')[0].innerHTML = 'какой-то html-код';

Но метод «getElementsByClassName» работает только в новых браузерах, нужно будет написать функцию, которая выполнить тоже самое в старых браузерах.

Period 15.10.2008 23:09

Это чудо. Первый вариант заработал. Спасибо большое.


Часовой пояс GMT +3, время: 03:46.