如何将动态表单附加到表的末尾?

时间:2010-06-26 00:33:51

标签: javascript html forms greasemonkey

我对Javascript和Greasemonkey完全不熟悉,如果我这样做效率低或不正确,请随时纠正我。

在我发布的论坛中,单击“回复”按钮会弹出一个新窗口,只显示文本形式。我想创建一个greasemonkey脚本,将回复表单的脚本添加到实际的线程页面。

因此程序会遍历存储讨论的表,并将childNode附加到表的末尾。我希望childNode成为在回复页面中创建的表单。

这是我的剧本的骨架:

// ==UserScript== 
// @name QuickEeply 
// @namespace  http://userscripts.org/users/181447 
// @description    Adds "QuickReply" forms to TCC discussion posts 
// @include        * 
// ==/UserScript==


var tables = document.getElementsByTagName("td");  


for (var i = 0; i < tables.length; i++) {

 if (tables[i].className == "content") 
 {    var editTable = tables[i];
 } 

}

editTable.appendChild = ''

这是我从“回复页面”复制并粘贴的脚本

<form method="POST" action="http://dl.tccd.edu/index.php/classforums/posts/event=saveReply">
 <input type="hidden" name="subject" size="45" id="txt_subject" maxlength="200" value="">
 <br>
 Message:<br>
 <textarea rows="20" style="width:70%;" name="message" id="message"></textarea>

 <br>
 <br>
 <input type="submit" id="submit_post" value="Post Reply">
 <input type="hidden" name="post_id" value="1010815">
 <input type="hidden" name="thread_id" value="1010815">
</form>

那么我该如何创建一个找到当前页面的thread_id的脚本,并为该线程实际所在的页面上的每个页面创建一个回复框。

编辑:这是源代码 -

http://pastebin.com/2UaUVGJA(主要讨论页面)
http://pastebin.com/hAx2SPUu(回复页面)

编辑2:

I've used Brock's template, and it's not working.  What do I need to do to correct it?

// ==UserScript==
// @name           Quick_ReplyTest
// @namespace      http://userscripts.org/users/181447
// @description    Inserts QuickReply
// @include        *
// @require        http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// ==/UserScript==


/* Optional:
window.addEventListener ("load", Greasemonkey_main, false);
*/

$(document).ready (Greasemonkey_main);


function Greasemonkey_main ()
{
    /*--- Get the first node inside the id="main" span (Google.com)
        If that's not there, then get the first node of the html body.
    */
    var TargetNode  = $("a[href*='event=reply/post']");
    if (!TargetNode)
        TargetNode  = $("body *:first");


  $(TargetNode).after
    (
        "<form method="POST" action="http://dl.tccd.edu/index.php/classforums/posts/event=saveReply">
        + "<input type="hidden" name="subject" size="45" id="txt_subject" maxlength="200" value="">"
        + "<br> Message:<br>"
        + "<textarea rows="20" style="width:70%;" name="message" id="message"></textarea>"
        + "<br> <br>"
        + "<input type="submit" id="submit_post" value="Post Reply">"
        + "<input type="hidden" name="post_id" value="1010815">"
        +"<input type="hidden" name="thread_id" value="1010815">"
        +"</form>"
    );
}

2 个答案:

答案 0 :(得分:0)

转到 this answer 并获取Greasemonkey模板。

它向您展示了如何在特定节点上插入HTML(如表单)。

用表单HTML替换该示例的表HTML。然后,您的TargetNode将类似$("a[href*='event=reply/post']") - 基于引用的页面。请注意,这应该在每个帖子条目中插入表单。

警告:表单不一定是您想要的地方,我们还没有将表单同步到每个帖子。

尽你所能,但是在你完成第一部分工作和接受率之后,应该在新问题中询问下一阶段。 ; - )

答案 1 :(得分:0)

回复:

  

编辑2:   我使用过Brock的模板,它不起作用。我需要做些什么来纠正它?

你需要非常小心多线字符串和带引号或撇号的字符串。 <form>字符串中存在javascript语法错误。

我已经为你清理了(并将语法改为我喜欢的风格)......

请注意StackOverflow的语法突出显示如何将字符串全部保持为红色?大多数编程编辑也会给出这样的线索。

$(TargetNode).after
(
   '<form method="POST" action="http://dl.tccd.edu/index.php/classforums/posts/event=saveReply">    \
    <input type="hidden" name="subject" size="45" id="txt_subject" maxlength="200" value="">        \
    <br> Message:<br>                                                                               \
    <textarea rows="20" style="width:70%;" name="message" id="message"></textarea>                  \
    <br> <br>                                                                                       \
    <input type="submit" id="submit_post" value="Post Reply">                                       \
    <input type="hidden" name="post_id" value="1010815">                                            \
    <input type="hidden" name="thread_id" value="1010815">                                          \
    </form>                                                                                         \
   '
);

如果还有其他问题,请打开一个新问题,这样就不会太难以理解。