Показать сообщение отдельно
  #10 (permalink)  
Старый 17.12.2014, 01:22
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,577

Букмарклет:
javascript:(function(script,body,src){script.src=src;body.appendChild(script)}(document.createElement('script'),document.body,'http://site/script.js'));;

Скрипт который отдаёт сервер:
(function(){
  var dict = { //массив переведенных иероглифов и линков на картинки
    '高於' : 'http://site.ru/img1.jpg',
    'меняем' : 'http://site.ru/img2.jpg'
  }


  var locale = function(re, arr){ //сразу преобразуем список в регулярное выражение
    var i = arr.length;
    while(i--)  arr[i] = arr[i].replace(re, '\\$&')
    return new RegExp(Object.keys(dict).join('|'), 'g')
  }(/[.*+?^${}()|\[\]\/\\]/g, dict);

  function replace(node){
    var frag = document.createDocumentFragment(),
        div = document.createElement('div');
    div.appendChild(node.cloneNode());
    div.innerHTML = div.innerHTML.replace(locale, function(word) { return '<img src="' + dict[word] + '">' });
    while(div.hasChildNodes()) frag.appendChild(div.firstChild);           
    return frag      
  }

  var elems = document.getElementsByTagName('*'), i = elems.length;
  while(i--) {
    var childs = elems[i].childNodes, j = childs.length;
    while(j--) if( childs[j].nodeType === 3 && locale.test( childs[j].data ) ){ //перебираем детей и если нода текстовая и в ней есть переведённый текст
      elems[i].replaceChild(replace(childs[j]), childs[j]); //меняем текстовую ноду на фрагмент докумета из текста и картинки
    }       
  }
}())
__________________
29375, 35
Ответить с цитированием