2

次のHTMLをColdFusion9の変数に格納しています。4番目の後に新しいテーブル行を挿入する必要があります</tr>。つまり、[送信]ボタンの前です。

<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&nbsp;*&nbsp;</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&nbsp;*&nbsp;</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>

ReReplaceは道のりのようですが、正規表現を正しく取得するのに問題があります。もう1つのオプションは、文字列を分割して、新しいHTMLを途中で再構築することです。任意の提案をいただければ幸いです。

4

2 に答える 2

5

正規表現はこれには間違ったツールです-HTMLパーサーが必要です。

JSoupでそれを行う方法は次のとおりです。

<cfsavecontent variable="InputHtml">
    [insert code from question]
</cfsavecontent>

<cfsavecontent variable="NewRow">
    <tr><th>whatever</th><td>stuff</td></tr>
</cfsavecontent>

<!--- Read "Creating Objects From Jar Files" --->
<cfset jsoup = createObject('java','org.jsoup.Jsoup') />

<cfset HtmlDom = jsoup.parse(InputHtml) />

<cfset HtmlDom.select('tr:eq(4)').after( NewRow ) />

<cfoutput>
    <pre>#XmlFormat(HtmlDom.body().html())#</pre>
</cfoutput>

JSoupSelectorAPIでサポートされているセレクターの詳細を確認できます

テーブルに何行あるかわからない/気にしない場合は、次のことができます...

HtmlDom.select('table>tbody').append( NewRow )

...最後に新しい行を追加するだけです。


Jarファイルからのオブジェクトの作成

上記のコードは、サーバーがJSoupを認識していないため、コピーして貼り付けるとすぐに機能しない可能性があります。Jarファイルをダウンロードして適切な場所に配置する必要があります。

CF9の場合、jsoup-1.6.3.jarを{coldfusion} / libディレクトリにコピーしてから、サーバーを再起動する必要があります。

CF10の場合this.JavaSettings、Application.cfc(ここで説明)で使用して、別の場所に配置できます。

RailoおよびOpenBDの場合、JARファイルの場所を3番目の引数として指定できます。例:

<cfset jsoup = createObject('java','org.jsoup.Jsoup','lib/jsoup-1.6.3.jar') />
于 2012-08-11T21:31:44.940 に答える
1

jQueryでこれを行うことをお勧めします:

​$(document).ready(function(){

   $($('form tr')[3]).after('<tr><td>row</tr></tr>');

});​

はるかに簡単です。

于 2012-08-18T06:56:05.047 に答える