#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.
Комментарии:
1. Мой плохой, слишком поздно, слишком устал. Пропустил часть о выборе : document.getSelection() . 1 это, тогда