Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Смена текста на изображение (https://javascript.ru/forum/events/31286-smena-teksta-na-izobrazhenie.html)

mooni 01.09.2012 14:23

Смена текста на изображение
 
Добрый день, форумчане!
Появилась такая проблема: необходимо определённые слова на странице заменить изображением.
Создал объект и указал на него ссылку:

picTab = new Image();
picTab.src = "http://i294.photobucket.com/albums/mm119/lazarncane/1.gif";


Далее ищу нужные слова и пытаюсь их заменить:

window.onload=function(){

all_elements=document.getElementsByTagName('*');
for(i=0,s=all_elements.length;i<s;i++)
    if(all_elements[i].tagName!="SCRIPT")
        for(j=0,s_=all_elements[i].childNodes.length;j<s_;j++)
            if(all_elements[i].childNodes[j].nodeType==3)
                all_elements[i].childNodes[j].textContent=all_elements[i].childNodes[j].textContent.replace(/\[tab\]/g, picTab);
}


Но браузер в таком случае не воспроизводит объект, пишет только [object HTMLImageElement].

Подскажете, как с этим можно справится?

Я так понимаю, что этот код для инлайновых элементов, а не для объектов. Может вас не затруднит объяснить мне. Заранее спасибо.

cyber 01.09.2012 14:28

:blink: вы про замыкания явно не слышали

mooni 01.09.2012 14:45

Только мельком. Читал, но не особо то и понял.

cyber 01.09.2012 14:46

замыкание можно использовать что бы оптимизировать, но мне было влом его писать=)
<!DOCTYPE HTML>
<html>
  <head>
  
    <style>
      img {
        width:20px;
        height:20px;
      
      }
    
    </style>
  </head>
  <body>
    <div>
У этого термина существуют и другие значения, см. Земля (значения).
Земля́ — третья от Солнца планетаlol Солнечной системы, крупнейшая по диаметру, массе и плотности среди планет земной группы.
    </div>
    <div>
      Чаще всего упоминается как Мир, Голубая планета[4][5], иногда Терра (от лат. Terra). Единственное известное человеку на данный момент тело Солнечной системы в частности и Вселенной вообще, населённое живыми организмами.lol
      Научные данные указывают на то, что Земля образовалась из солнечной туманности около 4,54 миллиардов лет назад,[6][7][8][9] и вскоре после этого приобрела свой единственный естественный спутник — Луну. Жизнь появилась lol на Земле около 3,5 миллиардов лет назад. С тех пор биосфера Земли значительно изменила атмосферу и прочие абиотические факторы, обусловив количественный рост аэробных организмов, так же как и формирование озонового слоя, который вместе с магнитным полем Земли ослабляет вредную солнечную радиацию, тем самым сохраняя условия для жизни на Земле. Учитывая период полураспада радиоактивных элементов, радиация, обусловленная самой земной корой, снизилась ещё более значительно. Кора Земли разделена на несколько сегментов, или тектонических плит, которые постепенно мигрируют по поверхности за периоды во много миллионов лет. Приблизительно 70,8 % поверхности планеты занимает Мировой океан[10], остальную часть поверхности занимают континенты и острова.</div>
    <div>  
      Жидкая вода, необходимая для всех известных жизненных форм, не существует на поверхности какой-либо из известных планет и lol планетоидов Солнечной системы, кроме Земли. Внутренние области Земли достаточно активны и состоят из толстого, очень вязкого слоя, называемого мантией, которая покрывает жидкое внешнее ядро (которое и является источником магнитного поля Земли) и внутреннее твёрдое ядро, предположительно, железное.
    </div>
   <div> 
  Земля взаимодействует (притягивается гравитационными силами) с другими объектами в космосе, включая Солнце и Луну. Земля lol обращается вокруг Солнца и делает вокруг него полный оборот примерно за 365,26 дней. Этот отрезок времени — сидерический год, который равен 365,26 солнечным суткам. Ось вращения Земли наклонена на 23,4° относительно её орбитальной плоскости, это вызывает сезонные изменения на поверхности планеты с периодом в один тропический год (365,24 солнечных суток). Сутки сейчас составляют примерно 24 часа.</div> <div>Луна lol начала своё обращение на орбите вокруг Земли примерно 4,53 миллиарда лет назад, что стабилизировало осевой наклон планеты[источник не указан 141 день] и является причиной приливов, которые замедляют вращение Земли и отдаляют Луну. Некоторые теории полагают, что падения астероидов приводили к существенным изменениям в окружающей среде и поверхности Земли, в частности, массовые вымирания различных видов живых существ[11].
      </div>
      <script>
 
function FindReplace (word, img) {       

  var elements = document.body.getElementsByTagName('*');
  var element, html;
  var regE = new RegExp (word);

  for (var i = elements.length;i--;){
   
    element = elements[i]
    html = element.innerHTML; 
   
    if( html.search(regE)== -1) continue;
      
      
    element.innerHTML =  html.replace(regE,img)  
      
       
  
  }

    }
FindReplace('lol','<img src="http://ctrlc.ru/wp-content/uploads/2012/06/18.jpg" >')
    </script>

  </body>
</html>

cyber 01.09.2012 14:54

как то так=)
<!DOCTYPE HTML>
<html>
  <head>
  
    <style>
      img {
        width:20px;
        height:20px;
      
      }
    
    </style>
  </head>
  <body>
    <div>
У этого термина существуют и другие значения, см. Земля (значения).
Земля́ — третья от Солнца планетаlol Солнечной системы, крупнейшая по диаметру, массе и плотности среди планет земной группы.
    </div>
    <div>
      Чаще всего упоминается как Мир, Голубая планета[4][5], иногда Терра (от лат. Terra). Единственное известное человеку на данный момент тело Солнечной системы в частности и Вселенной вообще, населённое живыми организмами.lol
      Научные данные указывают на то, что Земля образовалась из солнечной туманности около 4,54 миллиардов лет назад,[6][7][8][9] и вскоре после этого приобрела свой единственный естественный спутник — Луну. Жизнь появилась lol на Земле около 3,5 миллиардов лет назад. С тех пор биосфера Земли значительно изменила атмосферу и прочие абиотические факторы, обусловив количественный рост аэробных организмов, так же как и формирование озонового слоя, который вместе с магнитным полем Земли ослабляет вредную солнечную радиацию, тем самым сохраняя условия для жизни на Земле. Учитывая период полураспада радиоактивных элементов, радиация, обусловленная самой земной корой, снизилась ещё более значительно. Кора Земли разделена на несколько сегментов, или тектонических плит, которые постепенно мигрируют по поверхности за периоды во много миллионов лет. Приблизительно 70,8 % поверхности планеты занимает Мировой океан[10], остальную часть поверхности занимают континенты и острова.</div>
    <div>  
      Жидкая вода, необходимая для всех известных жизненных форм, не существует на поверхности какой-либо из известных планет и lol планетоидов Солнечной системы, кроме Земли. Внутренние области Земли достаточно активны и состоят из толстого, очень вязкого слоя, называемого мантией, которая покрывает жидкое внешнее ядро (которое и является источником магнитного поля Земли) и внутреннее твёрдое ядро, предположительно, железное.
    </div>
   <div> 
  Земля взаимодействует (притягивается гравитационными силами) с другими объектами в космосе, включая Солнце и Луну. Земля  обращается вокруг Солнца и делает вокруг него полный оборот примерно за 365,26 дней. Этот отрезок времени — сидерический год, который равен 365,26 солнечным суткам. Ось вращения Земли наклонена на 23,4° относительно её орбитальной плоскости, это вызывает сезонные изменения на поверхности планеты с периодом в один тропический год (365,24 солнечных суток). Сутки сейчас составляют примерно 24 часа.</div> <div>Луна lol начала своё обращение на орбите вокруг Земли примерно 4,53 миллиарда лет назад, что стабилизировало осевой наклон планеты[источник не указан 141 день] и является причиной приливов, которые замедляют вращение Земли и отдаляют Луну. Некоторые теории полагают, что падения астероидов приводили к существенным изменениям в окружающей среде и поверхности Земли, в частности, массовые вымирания различных видов живых существ[11].
      </div>
      <script>
 
function FindReplace (word, img) {       

  var elements = document.body.getElementsByTagName('*');
  var element, html, i = 0;
  var regE = new RegExp (word,'ig');
  var leng = elements.length;
  (function closing() {
   
    element = elements[i]
    html = element.innerHTML; 
   
    if( html.search(regE)== -1){
      
      end();
      return;
    }
      console.log(html.replace(regE,img))
    element.innerHTML =  html.replace(regE,img);  
      
       
    function end () {
     if (i > leng-1) return; 
      console.log(i > leng-1)
     i++;
     setTimeout(closing,0);
     }
   end(); 
  }());

    }
FindReplace('lol','<img src="http://ctrlc.ru/wp-content/uploads/2012/06/18.jpg" >')
    </script>

  </body>
</html>

cyber 01.09.2012 14:57

но лучше это делать на пхп так как DOM элементы при перезаписи перезагружаются (картинки ... )

mooni 01.09.2012 15:01

На пхп-то я бы это сделал, но вот проблема: это делается для форума, исходного кода нет, приходится выкручиваться javascript'ом. Сейчас попробовал ваш код. Сбивается разметка страницы.(

mooni 01.09.2012 15:02

Был бы доступ к исходному коду форума, мне бы так вообще извращаться не пришлось.)

cyber 01.09.2012 15:04

эм...
т.е сбивается?

mooni 01.09.2012 15:07


вот такая шляпа получается.


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