Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Изменить слово на странице (https://javascript.ru/forum/dom-window/5642-izmenit-slovo-na-stranice.html)

arma 28.10.2009 11:47

Изменить слово на странице
 
Люди, долго упорно искал как это сделать, ничего не нашол, и сделал сам:
document.body.innerHTML=document.body.innerHTML.replace("Привед", "HLO");

Всё бы ничего, только вот проблема, что если предварительно в текстовый инпут вставить текст, то после применения кода он исчезает (визде кроме ие). А радиоинпуты, пощёлканые после загрузки, приходят в своё начальное положение. Кароче все элементы формы приходят в начальное положение.

Может кто подскажет другой способ замены любого слова на странице? Надо это для изменения языка на станице - хочу сделать мгновенный перевод.

B~Vladi 28.10.2009 12:55

Цитата:

Сообщение от arma
Надо это для изменения языка на станице - хочу сделать мгновенный перевод.

И весь словарь грузить в JS?!:D
Так дела не делаются;)

arma 28.10.2009 13:00

не, страничка маленькая - слов мало. Словарь всего 3 кб получается. Иначе можно было бы XMLHttpRequest-ом

B~Vladi 28.10.2009 13:13

Как вариант: рекурсивно пройдись по всем текстовым узлам и заменяй их nodeValue. Для кнопок используй свойство value.

arma 28.10.2009 14:52

Делаю
for (y=0; y<=document.all.length-1; y++)
		{
		alert(document.all[y].nodeType);
		}

Он говорить что все элементы первого типа (ELEMENT_NODE) ... То есть текстовых элементов нет. :(

Вот кусок штмл:
<body><span>Привед</span>
<table>
<tr>
<td><input id="radiofile" name="radiobutton" type="radio" value="radiobutton"   />Ссылка</td>
<td><input id="radiofile" name="radiobutton" type="radio" value="radiobutton" checked="checked"  />Файл</td>
</tr>
</table>
</body>

B~Vladi 28.10.2009 15:11

document.all - нет такого, забудь про это.

function getAllTextNode(node){
  for(var i=0, childs=node.childNodes; i<childs.length; i++){
    if(childs[i].nodeType==3){
      // Заменяем nodeValue элемента.
      alert(childs[i].nodeValue);
    }else if(childs[i].nodeType==1){
      if(childs[i].type=='button' || childs[i].type=='text'){
        alert(childs[i].value);
        // Заменяем value елемента.
      }else return getAllTextNode(childs[i]);
    }
  }
}
getAllTextNode(document.body);


На работоспособность не тестил, но суть должна быть ясна.

arma 28.10.2009 15:46

Спасибо! Помогло!
Хотя без document.all обойтись не пришлось :)

for (y=0; y<=document.all.length-1; y++)
			{
			getAllTextNode(document.all[y]);
			}

Иначе не работает

B~Vladi 28.10.2009 16:06

document.all не везде работает... Тебе виднее...

arma 28.10.2009 17:04

Это я знаю
if (document.all) 
	{
   objar = document.all;
	}
else 
	{
   objar = document.getElementsByTagName('*');
	}

B~Vladi 28.10.2009 17:08

Так почему бы сразу не использовать getElementsByTagName('*') ?


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