使用带有jquery的textarea搜索所有表单中的提交按钮

时间:2010-05-18 13:21:07

标签: javascript jquery html forms

我正在开发一个Firefox插件,可以在网页上搜索所有textareas并在提交按钮之前发出警告。

我的代码看起来像这样

var submitWarning = content.document.createElement("div");
submitWarning.innerHTML = "Fancy Message";
$('textarea', window.content.document).each(function() {
    var form = $(this, window.content.document).parents('form:first');
    $(form, window.content.document).children('input[type=submit]').each(function() {
         form.insertBefore(submitWarning, this);
    });
});

如果我用$('input[type=submit]'.each搜索所有提交,它工作正常但是因为我添加了textarea的东西而form:first我遇到了问题(没有任何反应)

P.S。我使用window.content.document thingy,因为它是一个ff-plugin,如果没有它就无法正常工作

3 个答案:

答案 0 :(得分:1)

您需要稍微更改一下,如下所示:

var submitWarning = content.document.createElement("div");
submitWarning.innerHTML = "Fancy Message";
$('textarea', window.content.document)
   .closest('form')
   .find('input[type=submit]')
   .before(submitWarning);

参数语法为$(selector, context),在找到表单时,首先有.closest(),这样可以更轻松,当你有一个元素时,你可以在它内部使用$(this) {{} 3}},无需再次搜索。此外,您可以使用.each()来简化:)

答案 1 :(得分:1)

:has()选择器对我来说是最好的选择。摆脱你的大量代码并使用它。

var buttons = $("form:has(textarea) input[type=submit]", window.content.document);
$("<div>").html("Fancy Message").insertBefore(buttons);

答案 2 :(得分:0)

试试var form = $(this, window.content.document).closest('form');。不确定这是不是票,但这是我头脑中的第一件事。