在JS

时间:2018-08-07 22:18:54

标签: javascript jquery css

我正在为纯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源。

2 个答案:

答案 0 :(得分:0)

使用索引将字符串拆分为数组,而不是立即插入跨度。像这样:

"<p>highlight me</p>"

["<p>", "highlight me", "</p>"]

[ "&lt;p&gt;", "highlight me", "&lt;p&gt;"]

"&lt;p&gt;<span class="highlight">highlight me</span>&lt;p&gt;"

答案 1 :(得分:0)

在这里,我用解决方案回答自己的问题。 我当时想的很复杂,现在却有了务实的方法。

  • 我首先向原始html注入自己的唯一令牌。
  • 然后我对html进行编码(此处使用https://stackoverflow.com/a/14346506/3466839中的htmlEncode函数)。
  • 最后,我用真正的突出显示代码替换了令牌。
  • 然后我可以使用.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);

对不起,我的问题不好,被否决了。如果您留下评论我做错了,下次我会做得更好。

感谢您的参与帮助了很多人!