Как заставить JavaScript влиять только на код между конкретными тегами - PullRequest
0 голосов
/ 10 марта 2012

Это источник моей простой HTML-страницы (сохранить как файл .html):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript">
function convert(){
 var ele1 = document.getElementById("somewhere");
 var replaced;
 replaced = ele1.value;
 replaced = replaced.replace(/&/ig, "&amp;");
 replaced = replaced.replace(/</ig, "&lt;");
 replaced = replaced.replace(/>/ig, "&gt;");
 replaced = replaced.replace(/'/ig, "&#039;");
 replaced = replaced.replace(/"/ig, "&quot;");
 ele1.value = replaced;
}
</script>
</head>

<body>
<textarea cols="70" id="somewhere" rows="15" style="background: none repeat scroll 0% 0% rgb(250, 250, 250); border: 2px solid rgb(204, 204, 204);"></textarea><br />
<input onclick="convert();" type="button" value="Encode" />
</body>
</html>

Что делает эта страница, так это то, что любой код, помещенный в текстовую область, кодируется / экранируется HTML, когда "Нажата кнопка «Кодировать» - практически все экземпляры &, <, >, ' и " во входном коде заменяются соответствующими HTML-сущностями.

Как мнеизменить код JavaScript на странице так, чтобы только код ввода между тегами <pre> и </pre> был изменен, как указано выше?


РЕДАКТИРОВАТЬ: Как я вижу, яне было понятноСначала вам нужно сохранить приведенный выше HTML-код в HTML-файл и открыть его в браузере.Затем вы увидите текстовое поле / текстовое поле с кнопкой «Кодировать» под ним.

Любой код, помещенный в текстовую область, экранируется при нажатии кнопки «Кодировать».

Я хочуизмените код JavaScript в приведенном выше коде HTML, чтобы (например), если я поместил следующий код в текстовое поле:

<code>It's mine.
<pre>
<input onclick="convert();" type="button" value="Encode" />
Это также мое.

и нажмите кнопку «Кодировать», экранируется только код между тегами <pre>.Надеюсь, на этот раз у меня все ясно.


Надеюсь, у меня все ясно, и я могу получить некоторую помощь.Спасибо.

Ответы [ 2 ]

1 голос
/ 10 марта 2012

Я не уверен в том, что вы пытаетесь конвертировать. ele1.innerHTML анализирует HTML точно так, как он должен быть проанализирован. То есть. < будет преобразовано в &lt;, который является действительным HTML.

Отредактировано

function convert(){
  var txt=document.getElementById('somewhere');
  txt.innerText=txt.innerHTML;
  return;
}

Цитаты и хипсалы действительны в формате html, но если вы хотите заменить их:

var txt=document.getElementById('somewhere');
var txti=txt.innerHTML;
txti=txti.replace(/\"/g, "&quot;");
txti=txti.replace(/\'/g, "&#039;");
txt.innerText=txti;
1 голос
/ 10 марта 2012

Использование:

var ele1 = document.getElementById("somewhere");

Вы можете использовать:

var ele1 = document.getElementsByTagName("pre");

Однако это может вернуть несколько элементов, поскольку в вашем html может быть несколько <pre> разделов.*

Но, опять же, если ваша цель - обеспечить безопасный вывод, выход не является предпочтительным решением.Посмотрите на уценку, например:
http://daringfireball.net/projects/markdown/basics

...