coldfusion为某些类添加id
目前我有一堆HTML存储在一个变量中,我输出到看起来有点像这样的页面:
some stuff
a heading
a subheading
wording and such
another subheading
你明白了。
并输出如下:
#request.oEntry.getHTMLStuff()#
无论如何,我需要找到所有类的“subsubhead”并添加一个id =“x”,其中x对应于我对该子标题的数据库ID。
我认为这最好在Coldfusion中完成,因为数据库ID已经存在于cfquery中,并且我无法混合和匹配jQuery和ColdFusion。
目前还不确定最好的方法。
既然您喜欢jQuery但需要在CF中执行此操作,我建议使用HTML解析器JSOUP来完成此工作。 JSOUP的语法与jQuery非常相似,但在服务器端使用java(以及CF)进行操作。 下载jar并将其添加到CF类路径后,您可以像这样使用它:
some stuff
a heading
a subheading
wording and such
another subheading
#HTMLEditFormat(htmlObj.body().html())#
这输出:
some stuff
a heading
a subheading
wording and such
another subheading
我将id值(通过检查p标签内容)分配给子标题的特定实例的方式只是一种选择; 您还可以根据每个元素的顺序(数组中元素的顺序和查询中id的顺序)将元素与数据库查询匹配。 由你决定。
有问题的HTML片段是否可以适应XML文档(它需要具有根节点并且符合XML标准)。 如果可以,那么你可以在ColdFusion中的结果对象上使用XPath或XQuery来获取class属性中值为“subsubhead”的所有元素,然后相应地更改属性值,然后写回字符串。 示例如下:
some stuff
a heading
a subheading
wording and such
another subheading
请记住,在上面的示例中,在写回之前删除片段根节点。
这是我提出的代码。
local.string = request.oEntry.getEditorial(); local.x = 0; do{ local.x = REFind("Subsubhead", local.string,local.x); if(local.x neq 0){ local.x = local.x+10; local.string = insert(" id='x'",local.string,local.x); } } while(local.x neq 0);
这对我有用,但可能有更好的方法
您可以尝试以下方法。 我认为你甚至不需要一个正则表达式:
#html_content#
注意双引号内的双引号,这样字符串就不会破坏! 部分。 在这种情况下 ,最好使用正则表达式来避免替换任何内容(不是很高的匹配机会,但你永远不知道): 这只会在HTML标记中用 希望这可以帮助。 这就是ColdFusion快速轻松地完成的事情。 更新:你没有在OP中提到 上面可能有一个错误(我没有测试),但我认为它通常是合理的。 replaceNoCase()
的最终参数值告诉CF替换所有出现的事件。 如果您希望在其他标记之间替换此类的值,请忽略
id="#id#" class="subsubhead"
(其中#id#
是CF变量的值)替换class="subsubhead"
。 x
的值是否需要随每次匹配而增加; 如果是这种情况,那么你将需要使用REFindNoCase()
和returnsubexpressions=true
(使用与上面相同的正则表达式),然后循环遍历len
和pos
数组: