我正在为纯HTML编写(动态)RegEx解析器以提取值。为了显示当前的RegEx结果,我想显示当前结果突出显示的HTML代码。
我在变量中包含HTML代码,我的RegEx匹配函数返回当前结果和结果索引。
因此,我在找到的字符串的位置注入了<span class="highlight">
,并在匹配时间结束后通过</span>
将其关闭。
我当前的问题是: 如果我将元素设置为element.text(newtext),则不会解析我注入的HTML。
另一方面,如果我用element.html(newtext)设置元素,则完整的HTML会被解析,并且可能会损坏。
如果我首先转义了未解析的HTML标记,则原始html的RegEx.match索引不等于转义的html,因此注入位置错误。
是否有一种将html代码处理为纯文本的好方法,但是使用索引将突出显示html的注入放到了正确的位置?
想一想 full html源代码-这是我的气象站的一小段代码:
<td bgcolor="#EDEFEF"><input name="inHumi" disabled="disabled" type="text" value="63" /></td>
用户输入匹配value="
的RegEx,因此value="
应该在html字符串中突出显示。
JS代码如下所示。想想所有设置的变量都是用户定义的HTML格式的,因此用户输入RegEx和HTML源代码作为文本,并且RegEx匹配应该在该格式中可见。
var rawhtml = '<td bgcolor="#EDEFEF"><input name="inHumi" disabled="disabled" type="text" value="63" /></td>';
var regex = 'value=\"';
var result = rawhtml.match(regex);
var result_string = result[0];
var result_index = result.index;
$("#visiblehtml").html(rawhtml.substring(0, result_index) + "<span class='highlight'>" + rawhtml.substring(index, index + result_string.length) + "</span>" + rawhtml.substring(index + result_string.length));
在输入字段的中间插入此跨度,html将会中断。另外,使用.html设置元素将解析并显示完整的rawhtml,而不是rawhtml源。
答案 0 :(得分:0)
使用索引将字符串拆分为数组,而不是立即插入跨度。像这样:
"<p>highlight me</p>"
["<p>", "highlight me", "</p>"]
[ "<p>", "highlight me", "<p>"]
"<p><span class="highlight">highlight me</span><p>"
答案 1 :(得分:0)
在这里,我用解决方案回答自己的问题。 我当时想的很复杂,现在却有了务实的方法。
.html
将结果设置到元素中。
var rawhtml = '<td bgcolor="#EDEFEF"><input name="inHumi" disabled="disabled" type="text" value="63" /></td>';
var regex = 'value=\"';
var result = rawhtml.match(regex);
var result_string = result[0];
var result_index = result.index;
var visiblehtml = rawhtml.substring(0, result_index) + "***highlight*" + rawhtml.substring(index, index + result_string.length) + "*highlight***" + rawhtml.substring(index + result_string.length);
var visiblehtml = htmlEncode(visiblehtml);
visiblehtml = visiblehtml.replace('***highlight*', '<span class="highlight">');
visiblehtml = visiblehtml.replace('*highlight***', '</span>');
$("#visiblehtml").html(visiblehtml);
对不起,我的问题不好,被否决了。如果您留下评论我做错了,下次我会做得更好。
感谢您的参与帮助了很多人!