2015-04-09 6 views
0

У меня есть строка, содержащая escape-символы HTML (для < и >), которые я пытаюсь сделать внутри div с использованием innerHTML. экранированные символы не должны отображаться как обычный html, а скорее как текст. Тем не менее, они все еще делают, так есть ли работа для этого?escape-символы не работают с innerHTML

Примечание: цель состоит в том, чтобы отобразить несколько (то есть не все) теги как обычный текст.

Вот пример реализации:

var string = "<div>yolo</div>"; 

string = string.replace(/</g, '&lt;'); //replaces all '<' with its escape character 
string = string.replace(/>/g, '&gt;'); //replaces all '>' with its escape character 

string = string.replace(/(=|%|\/|\*|-|,|;|\+|<|>)/g, "<span class=\"sc\">$1</span>"); 

//the last line adds special formatting 
//to certain characters using CSS (not shown) 
//and a span tag with class, "sc". 
//this is the reason that I cannot just simply 
//use innertext instead of innerhtml 

document.body.innerHTML = string; 

P.S., пожалуйста, дайте ответ в чистом JavaScript. Мне все равно, если вы добавите решение jQuery, мне просто нужен чистый javascript.

+0

http://jsfiddle.net/arunpjohny/qqsefuqe/1/ - что ожидаемый выход –

+0

или http://jsfiddle.net/arunpjohny/qqsefuqe/4/ –

+0

HTTP : //jsfiddle.net/blue1086/qqsefuqe/3/ – Downgoat

ответ

4

Это не работает должным образом, потому что вы заменяете ; с помощью <spans>. Попробуйте заменить весь &lt;первым, чтобы предотвратить разрывание объектов.

например.

var string = "<div>yolo</div>"; 
 

 
string = string.replace(/</g, '&lt;'); //replaces all '<' with its escape character 
 
string = string.replace(/>/g, '&gt;'); //replaces all '>' with its escape character 
 

 
string = string.replace(/(&lt;|&gt;|=|%|\/|\*|-|,|;|\+|<|>)/g, "<span class=\"sc\">$1</span>"); 
 

 
//the last line adds special formatting 
 
//to certain characters using CSS (not shown) 
 
//and a span tag with class, "sc". 
 
//this is the reason that I cannot just simply 
 
//use innertext instead of innerhtml 
 

 
document.body.innerHTML = string;
.sc { 
 
    color: red; 
 
    font-weight: bold; 
 
}

0

Если вы используете jQuery, вы можете иметь дело с text() вместо innerHTML().

+0

OP * специально указано * для * * Решение non-jQuery ** – Downgoat

+0

Я понял: «Мне все равно, если вы добавите решение jQuery», поскольку мы могли бы добавить решение jQuery. –

+0

См. Блок комментариев в коде, это объясняет, почему это не работает для случая использования OP. –