Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.01.2010, 11:47
Профессор
Отправить личное сообщение для da_ff Посмотреть профиль Найти все сообщения от da_ff
 
Регистрация: 12.05.2009
Сообщений: 317

конвертировать html-коды
Здраствуйте, не смог придумать строчку для поискового запроса. поэтому просто задав жутко тривиальный вопрос, есть у кого готовая функция для коевертирования html-кодов в их собственно нормальное представление?
Ответить с цитированием
  #2 (permalink)  
Старый 26.01.2010, 12:12
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

var t= document.createElement('textarea')
t.innerHTML= '<'
alert( t.value )
__________________
.ня
Ответить с цитированием
  #3 (permalink)  
Старый 26.01.2010, 13:25
Профессор
Отправить личное сообщение для da_ff Посмотреть профиль Найти все сообщения от da_ff
 
Регистрация: 12.05.2009
Сообщений: 317

Сообщение от tenshi Посмотреть сообщение
var t= document.createElement('textarea')
t.innerHTML= '<'
alert( t.value )
вы действительно так делаете?!

Последний раз редактировалось da_ff, 26.01.2010 в 13:31.
Ответить с цитированием
  #4 (permalink)  
Старый 26.01.2010, 13:28
Профессор
Отправить личное сообщение для da_ff Посмотреть профиль Найти все сообщения от da_ff
 
Регистрация: 12.05.2009
Сообщений: 317

пришлось писать свое
function convertSpecSymbols (str, toText) {
  var
    symbols = [
      ['&',     '&'],
      ['&lt;',      '<'],
      ['&gt;',      '>'],
      ['&and;',     '^'],
      ['&sim;',     '~']
    ],
    pos = -1;

  if (typeof toText == 'undefined' || toText) {
    for (var i = 0, n = symbols.length; i < n; i++) {
      while ((pos = str.indexOf(symbols[i][0], pos + 1)) != -1) {
        str = str.substring(0, pos) + symbols[i][1] + str.substring(pos + symbols[i][0].length);
      }
    }
  } else {
    for (var i = 0, n = symbols.length; i < n; i++) {
      while ((pos = str.indexOf(symbols[i][1], pos + 1)) != -1) {
        str = str.substring(0, pos) + symbols[i][0] + str.substring(pos + symbols[i][1].length);
      }
    }
  }
  return str;
}

Последний раз редактировалось da_ff, 26.01.2010 в 13:30.
Ответить с цитированием
  #5 (permalink)  
Старый 26.01.2010, 15:20
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от da_ff
symbols = [       ['&amp;',     '&'],       ['&lt;',      '<'],       ['&gt;',      '>'],       ['&and;',     '^'],       ['&sim;',     '~']     ],
аха
а теперь возьмите, и создайте нормальный массив хотя бы для этих именованных символов
Сообщение от da_ff
вы действительно так делаете?!
вы не поверите, но это будет быстрее и полнее чем ваша ф-ция
Ответить с цитированием
  #6 (permalink)  
Старый 26.01.2010, 15:29
Профессор
Отправить личное сообщение для da_ff Посмотреть профиль Найти все сообщения от da_ff
 
Регистрация: 12.05.2009
Сообщений: 317

действительно полагаете что так будет быстрее? если вы проверяли то скажите сразу, чтобы не мучиться.

Последний раз редактировалось da_ff, 26.01.2010 в 15:35.
Ответить с цитированием
  #7 (permalink)  
Старый 26.01.2010, 15:35
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Насчёт скорости не знаю, но тащить огромную таблицу символов ради сомнительной функции точно не стоит.
Ответить с цитированием
  #8 (permalink)  
Старый 26.01.2010, 15:49
Профессор
Отправить личное сообщение для da_ff Посмотреть профиль Найти все сообщения от da_ff
 
Регистрация: 12.05.2009
Сообщений: 317

во-первых, таблица конечная
во-вторых, скорость в плане приоритета куда выше объема написанного кода.
в-третьих, почему функция сомнительна?! сомнительна реализация функции, сама функция мне нужна и сомнительного в ней ничего нет.
Ответить с цитированием
  #9 (permalink)  
Старый 26.01.2010, 16:03
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от da_ff
во-первых, таблица конечная
Разумеется конечная, хотя бы потому, что множество символов конечно. Но немаленькая.

Сообщение от da_ff
во-вторых, скорость в плане приоритета куда выше объема написанного кода.
Различие в скорости будет много меньше различия в размерах. Более того -- различие в скорости будет мизерным.

Сообщение от da_ff
в-третьих, почему функция сомнительна?
Ну вот мне, например, никогда такая функция ещё не нужна была. Только теги заэскейпить -- да, а вот туеву хучу остальных символов -- нет. Я не исключаю, что вам это понадобилось, но это действительно очень редкий случай.
Ответить с цитированием
  #10 (permalink)  
Старый 26.01.2010, 16:41
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от da_ff
действительно полагаете что так будет быстрее? если вы проверяли то скажите сразу, чтобы не мучиться.
оптимизированный для многократного применения вариант tenshi, быстрее вашей ф-ции уже после 50-и &lt;
Если же вашу ф-цию переписать нормально, то она становится быстрее на любых тестах(по-крайней мере до 1000-и &lt
НО! если добавить в массив symbols еще сотню пар хотя бы, то на тысяче &lt; ваша ф-ция даже оптимизированная сдает позиции
как итог, ваша ф-ция более быстрая при меньшей универсальности
НО!
включение посторонних(не &xxx; ) символов сильно тормозит вашу ф-цию, а tenshi-вариант абсолюбтно не замедляется
(function(){
var t= document.createElement('textarea');
func1=function(text){
t.innerHTML=text;
return t.value
}
})();
function func2 (str, toText) {
  var
    symbols = [
      ['&amp;',     '&'],
      ['&lt;',      '<'],
      ['&gt;',      '>'],
      ['&and;',     '^'],
      ['&sim;',     '~'],
	  ['&nbsp;',' '],
['&iexcl;','¡'],
['&cent;','¢'],
['&pound;','£'],
['&curren;','¤'],
['&yen;','¥'],
['&brvbar;','¦'],
['&sect;','§'],
['&uml;','¨'],
['&copy;','©'],
['&ordf;','ª'],
['&laquo;','«'],
['&not;','¬'],
['&shy;',''],
['&reg;','®'],
['&macr;','¯'],
['&deg;','°'],
['&plusmn;','±'],
['&sup2;','²'],
['&sup3;','³'],
['&acute;','´'],
['&micro;','µ'],
['&para;','¶'],
['&middot;','·'],
['&cedil;','¸'],
['&sup1;','¹'],
['&ordm;','º'],
['&raquo;','»'],
['&frac14;','¼'],
['&frac12;','½'],
['&frac34;','¾'],
['&iquest;','¿'],
['&Agrave;','À'],
['&Aacute;','Á'],
['&Acirc;','Â'],
['&Atilde;','Ã'],
['&Auml;','Ä'],
['&Aring;','Å'],
['&AElig;','Æ'],
['&Ccedil;','Ç'],
['&Egrave;','È'],
['&Eacute;','É'],
['&Ecirc;','Ê'],
['&Euml;','Ë'],
['&Igrave;','Ì'],
['&Iacute;','Í'],
['&Icirc;','Î'],
['&Iuml;','Ï'],
['&ETH;','Ð'],
['&Ntilde;','Ñ'],
['&Ograve;','Ò'],
['&Oacute;','Ó'],
['&Ocirc;','Ô'],
['&Otilde;','Õ'],
['&Ouml;','Ö'],
['&times;','×'],
['&Oslash;','Ø'],
['&Ugrave;','Ù'],
['&Uacute;','Ú'],
['&Ucirc;','Û'],
['&Uuml;','Ü'],
['&Yacute;','Ý'],
['&THORN;','Þ'],
['&szlig;','ß'],
['&agrave;','à'],
['&aacute;','á'],
['&acirc;','â'],
['&atilde;','ã'],
['&auml;','ä'],
['&aring;','å'],
['&aelig;','æ'],
['&ccedil;','ç'],
['&egrave;','è'],
['&eacute;','é'],
['&ecirc;','ê'],
['&euml;','ë'],
['&igrave;','ì'],
['&iacute;','í'],
['&icirc;','î'],
['&iuml;','ï'],
['&eth;','ð'],
['&ntilde;','ñ'],
['&ograve;','ò'],
['&oacute;','ó'],
['&ocirc;','ô'],
['&otilde;','õ'],
['&ouml;','ö'],
['&divide;','÷'],
['&oslash;','ø'],
['&ugrave;','ù'],
['&uacute;','ú'],
['&ucirc;','û'],
['&uuml;','ü'],
['&yacute;','ý'],
['&thorn;','þ'],
['&yuml;','ÿ']
    ],
    pos = -1;

  if (typeof toText == 'undefined' || toText) {
    for (var i = 0, n = symbols.length; i < n; i++) {
		str=str.replace(new RegExp(symbols[i][0],'g'),symbols[i][1]);
    }
  } else {
    for (var i = 0, n = symbols.length; i < n; i++) {
	str=str.replace(new RegExp(symbols[i][1],'g'),symbols[i][0]);
    }
  }
  return str;
}

</script>
<script type="text/javascript">
var text='&lt;'
var start = new Date();
for (var i = 0; i < 10000; i++)
	{
	func1(text);
	}
var end = new Date();
var result = end.getTime() - start.getTime();
console.log(result + 'ms');
var start = new Date();
for (var i = 0; i < 10000; i++)
	{
	func2(text);
	}
var end = new Date();
var result = end.getTime() - start.getTime();
console.log(result + 'ms');

var text='&lt;||&lt;|&lt;|&lt;|&lt;|'+'&lt;|&lt;|&lt;|&lt;|&lt;|'+
'&lt;|&lt;|&lt;|&lt;|&lt;|'+'&lt;|&lt;|&lt;|&lt;|&lt;|'+
'&lt;|&lt;|&lt;|&lt;|&lt;|'+'&lt;|&lt;|&lt;|&lt;|&lt;|'+
'&lt;|&lt;|&lt;|&lt;|&lt;|'+'&lt;|&lt;|&lt;|&lt;|&lt;|'+
'&lt;|&lt;|&lt;|&lt;|&lt;|'+'&lt;|&lt;|&lt;|&lt;|&lt;|'
;
text+=text;
text=(text+text+text+text+text);
text+=text;
var start = new Date();
for (var i = 0; i < 100; i++)
	{
	func1(text);
	}
var end = new Date();
var result = end.getTime() - start.getTime();
console.log(result + 'ms');
var start = new Date();
for (var i = 0; i < 100; i++)
	{
	func2(text);
	}
var end = new Date();
var result = end.getTime() - start.getTime();
console.log(result + 'ms');

var text='&lt;||&lt;||&lt;||&lt;||&lt;||'+'&lt;||&lt;||&lt;||&lt;||&lt;||'+
'&lt;||&lt;||&lt;||&lt;||&lt;||'+'&lt;||&lt;||&lt;||&lt;||&lt;||'+
'&lt;||&lt;||&lt;||&lt;||&lt;||'+'&lt;||&lt;||&lt;||&lt;||&lt;||'+
'&lt;||&lt;||&lt;||&lt;||&lt;||'+'&lt;||&lt;||&lt;||&lt;||&lt;||'+
'&lt;||&lt;||&lt;||&lt;||&lt;||'+'&lt;||&lt;||&lt;||&lt;||&lt;||'
;
text+=text;
text=(text+text+text+text+text);
text+=text;
var start = new Date();
for (var i = 0; i < 100; i++)
	{
	func1(text);
	}
var end = new Date();
var result = end.getTime() - start.getTime();
console.log(result + 'ms');
var start = new Date();
for (var i = 0; i < 100; i++)
	{
	func2(text);
	}
var end = new Date();
var result = end.getTime() - start.getTime();
console.log(result + 'ms');

потестируйте сами
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление текста из html документа andikk Events/DOM/Window 12 26.07.2012 14:55
Переменные в HTML ibcmsm Общие вопросы Javascript 7 27.09.2011 14:35
передача данных из xml в html yupa AJAX и COMET 40 30.07.2009 10:11
AJAX. Возвращение массива HTML Neil AJAX и COMET 9 12.02.2009 16:00
На входе HTML получить на выходе просто текст, как? Dmitry Общие вопросы Javascript 2 25.08.2008 10:42