сопоставление и изменение цвета элементов html с помощью регулярных выражений

#javascript #html #regex #dom

#javascript #HTML #регулярное выражение #dom

Вопрос:

Здесь я использовал редактируемый div , в котором я буду писать имя любого html-элемента, скажем <div> , <body> this strings . Затем выбранная строка будет сопоставлена с использованием шаблона регулярных выражений, а затем снова будет записана внутри интервала и изменит цвет букв на красный. Но это не работает. Я думаю <> , что тег не позволяет этому произойти. Как это можно исправить?

 <html>
<body>
<div id="mydiv"  contenteditable="true" style="width:100%;height:40px;border:1px solid black;overflow:hidden;"><html></div>
<input type="button" value="select" onClick="makeit();">
<span></span>
<script>
function makeit(){
 var m=document.getElementById('mydiv');
var text=m.innerHTML;
var p=document.getSelection();
var h=p.toString();
var regex=/<[a-z] ?>/;
var match=h.match(regex);
alert(match  "matched");
var newelem=document.createElement('span');
newelem.setAttribute("style","color:red;position:relative;top:200px;left:0px]");

newelem.innerHTML=match;
document.body.appendChild(newelem);
}


</script>
</body>
</html>
 

Ответ №1:

Это потому < , что и > на самом деле amp;< и amp;> в contenteditable div.

Сделайте это:

 var regex = /amp;<[a-z] amp;>/g;
 

Я добавил g предположение, что вам нужны все совпадения, если нет, вы можете удалить его. Кроме того, по какой-то причине вы даже не смотрели на текст #mydiv , вы смотрели на выделенный текст (который, я думаю, мог оказаться внутри #mydiv ). Я изменил это в приведенном ниже jsfiddle.

JSFiddle

Комментарии:

1. Мой плохой, слишком поздно, слишком устал. Пропустил часть о выборе : document.getSelection() . 1 это, тогда