Regex ColdFusion 9重新替换第n次出现的HTML标记
我将以下HTML存储在ColdFusion 9中的一个变量中。我需要在第四个Regex ColdFusion 9重新替换第n次出现的HTML标记,regex,coldfusion,html-parsing,coldfusion-9,Regex,Coldfusion,Html Parsing,Coldfusion 9,我将以下HTML存储在ColdFusion 9中的一个变量中。我需要在第四个之后插入一个新表行。i、 e.在提交按钮之前 <form name="form1" id="form1" action="" method="post"> <table> <tr style="visibility:hidden;display:none;"><td> <input type="hidden" id="ref1" name="ref1"
之后插入一个新表行。i、 e.在提交按钮之前
<form name="form1" id="form1" action="" method="post">
<table>
<tr style="visibility:hidden;display:none;"><td> <input type="hidden" id="ref1" name="ref1" value="1" > </td></tr>
<tr style="visibility:hidden;display:none;"><td> <input type="hidden" id="ref2" name="ref2" value="2" > </td></tr>
<tr>
<th style="text-align:left;">Name * </th>
<td><input type="text" name="foo" id="foo" size="30" maxlength="50" value=""></td>
</tr>
<tr>
<th title="Please enter plain text or HTML." style="cursor:help;text-align:left;">Comment * </th>
<td><textarea name="bar" id="bar" cols="40" rows="10" ></textarea></td>
</tr>
<tr>
<th colspan="1"></th>
<td>
<input style="width:80px" type="submit" value="Submit">
<input style="width:80px" type="button" value="Cancel">
</td>
</tr>
</table>
姓名*
评论*
重新替换似乎是一个不错的方法,但我在正确使用regexp时遇到了麻烦。另一个选择是拆分字符串并用中间的新HTML重新构建它。如果您有任何建议,我们将不胜感激。Regex是一个错误的工具,您需要一个HTML解析器 以下是您如何使用: …仅在末尾添加新行
从Jar文件创建对象 如果您复制并粘贴它,上述代码很可能无法立即工作,因为您的服务器不知道JSoup—您需要下载Jar文件并将其放在合理的位置 对于CF9,需要将jsoup-1.6.3.jar复制到{coldfusion}/lib目录中,然后重新启动服务器 对于CF10,您可以在Application.cfc()中使用
this.JavaSettings
,将其放置在不同的位置
对于Railo和OpenBD,您可以将JAR文件的位置指定为第三个参数,例如:
$(document).ready(function(){
$($('form tr')[3]).after('<tr><td>row</tr></tr>');
});
我建议使用jQuery执行此操作:
$(文档).就绪(函数(){
$($('form tr')[3])。在('row')之后;
});
更简单。谢谢你的回答,彼得。我找到了一种更简单的方法来做我想做的事情,但我肯定会研究JSoup,以便将来进行HTML解析!出于好奇,什么是更简单的方法呢?我能够创建一个自定义的隐藏字段,然后我可以搜索并在字符串中进行简单替换,而不是使用regexp。受到一个古老的API的限制是令人沮丧的……jQuery是客户端(jSoup比在Rhino中运行jQuery更容易)。另外,使用
append
将内容放在目标项中,因此此答案是错误的。(在我的回答中有一个append
和after
的例子。)另外$('formtr:eq(3)
比嵌套更简单。我已经将其更新为“after”而不是“append”。OP没有指定这需要在服务器端完成。另外,:eq选择器对性能不好哇,那:eq的东西糟透了。尽管如此,该页面还是推荐了可读性更好的$('form tr').eq(3)
。至于客户机与服务器,在服务器上执行一次(并缓存)几乎总是比在每个客户机上重复要更好。(更不用说并非所有客户都执行JS。)谢谢您的回答。我很感激!
HtmlDom.select('table>tbody').append( NewRow )
<cfset jsoup = createObject('java','org.jsoup.Jsoup','lib/jsoup-1.6.3.jar') />
$(document).ready(function(){
$($('form tr')[3]).after('<tr><td>row</tr></tr>');
});